{"record":{"id":"ec43bf4c15ed1a67","repo":"Unity-Technologies/UnityCsReference","slug":"rendererids-and-results-nativearrays-don-t-match-i","errorCode":null,"errorMessage":"rendererIDs and results NativeArrays don't match in length.","messagePattern":"rendererIDs and results NativeArrays don't match in length\\.","errorType":"exception","errorClass":"ArgumentException","httpStatus":null,"severity":"error","filePath":"Editor/Mono/Camera/EditorCameraUtils.bindings.cs","lineNumber":32,"sourceCode":"namespace UnityEditor.Rendering\n{\n    [NativeHeader(\"Editor/Src/Camera/EditorCameraUtils.h\")]\n    [RequiredByNativeCode]\n    public static class EditorCameraUtils\n    {\n        public static bool RenderToCubemap(this Camera camera, Texture target, int faceMask, StaticEditorFlags culledFlags)\n            => RenderToCubemapImpl(camera, target, faceMask, culledFlags) == 1;\n\n        [System.Obsolete(\"GetRenderersFilteringResults(ReadOnlySpan<int>) is obsolete. Use GetRenderersFilteringResults(ReadOnlySpan<EntityId>) instead.\", true)]\n        public static unsafe void GetRenderersFilteringResults(ReadOnlySpan<int> rendererIDs, Span<bool> results)\n        {\n            throw new System.NotImplementedException(\"GetRenderersFilteringResults(ReadOnlySpan<int>) is obsolete. Use GetRenderersFilteringResults(ReadOnlySpan<EntityId>) instead.\");\n        }\n\n        public static unsafe void GetRenderersFilteringResults(ReadOnlySpan<EntityId> rendererIDs, Span<bool> results)\n        {\n            if (rendererIDs.Length != results.Length)\n                throw new ArgumentException(\"rendererIDs and results NativeArrays don't match in length.\");\n\n            GetRenderersFilteringResultsImpl(rendererIDs, results);\n        }\n\n        [System.Obsolete(\"GetRenderersHiddenResultBits(ReadOnlySpan<int>) is obsolete. Use GetRenderersHiddenResultBits(ReadOnlySpan<EntityId>) instead.\", true)]\n        public static unsafe void GetRenderersHiddenResultBits(ReadOnlySpan<int> rendererIDs, Span<ulong> resultBits)\n        {\n            throw new System.NotImplementedException(\"GetRenderersHiddenResultBits(ReadOnlySpan<int>) is obsolete. Use GetRenderersHiddenResultBits(ReadOnlySpan<EntityId>) instead.\");\n        }\n\n        public static unsafe void GetRenderersHiddenResultBits(ReadOnlySpan<EntityId> rendererIDs, Span<ulong> resultBits)\n        {\n            const int kBitsPerChunkCount = sizeof(ulong) * 8;\n\n            int resultBitsLengthExpected = (rendererIDs.Length + kBitsPerChunkCount - 1) / kBitsPerChunkCount;\n\n            if (resultBitsLengthExpected != resultBits.Length)\n                throw new ArgumentException(\"Unexpected resultBits Span length. The expected length of resultBits Span should be equal to the formula: (rendererIDs.Length + 63) / 64\");","sourceCodeStart":14,"sourceCodeEnd":50,"githubUrl":"https://github.com/Unity-Technologies/UnityCsReference/blob/225b0fbdb57cc17d094e8056b71f8314aba56f73/Editor/Mono/Camera/EditorCameraUtils.bindings.cs#L14-L50","documentation":"Thrown by the current GetRenderersFilteringResults(ReadOnlySpan<EntityId>, Span<bool>) overload when rendererIDs.Length != results.Length. The native implementation writes one bool per renderer, so the caller must supply a results span of identical length. A length mismatch throws ArgumentException.","triggerScenarios":"Passing a results Span<bool> whose Length differs from the rendererIDs ReadOnlySpan<EntityId> Length — e.g. reusing a pre-sized buffer that does not match the current renderer count.","commonSituations":"Allocating results once and reusing it across varying renderer sets; off-by-one sizing; pooling buffers without resizing to the new query size.","solutions":["Allocate results with the same length as rendererIDs (new bool[rendererIDs.Length] or Span over matching buffer).","Validate lengths match before calling and resize the results buffer if not.","Use stackalloc or a pooled buffer sized exactly to rendererIDs.Length."],"exampleFix":"// before\nvar results = new bool[prevCount];\nEditorCameraUtils.GetRenderersFilteringResults(ids, results);\n\n// after\nSpan<bool> results = ids.Length <= 256 ? stackalloc bool[ids.Length] : new bool[ids.Length];\nEditorCameraUtils.GetRenderersFilteringResults(ids, results);","handlingStrategy":"validation","validationCode":"if (rendererIDs.Length == results.Length) EditorCameraUtils.GetRenderersFilteringResults(rendererIDs, results);","typeGuard":"static bool LengthsMatch<T1,T2>(ReadOnlySpan<T1> a, Span<T2> b) => a.Length == b.Length;","tryCatchPattern":null,"preventionTips":["Size the results span to exactly rendererIDs.Length.","Re-allocate buffers when the renderer set size changes.","Prefer stackalloc sized to the current query."],"tags":["unity","rendering","span","length-mismatch","argumentexception","validation"],"backgroundTag":null,"analyzedSha":"225b0fbdb57cc17d094e8056b71f8314aba56f73","analyzedAt":"2026-08-13T19:07:19.849Z","schemaVersion":2},"datasetVersion":"2026-08-13T19:17:28.613Z"}