public void DeleteRun() { PipelineResources resources = RenderPipeline.current.resources; PipelineBaseBuffer baseBuffer = SceneController.baseBuffer; int result = baseBuffer.clusterCount - property.clusterCount; ComputeShader shader = resources.shaders.streamingShader; if (result > 0) { NativeArray <int> indirectArgs = new NativeArray <int>(5, Allocator.Temp, NativeArrayOptions.UninitializedMemory); indirectArgs[0] = 0; indirectArgs[1] = 1; indirectArgs[2] = 1; indirectArgs[3] = result; indirectArgs[4] = propertyCount; baseBuffer.moveCountBuffer.SetData(indirectArgs); ComputeBuffer indexBuffer = SceneController.GetTempPropertyBuffer(property.clusterCount, 8); indirectArgs.Dispose(); shader.SetBuffer(0, ShaderIDs.instanceCountBuffer, baseBuffer.moveCountBuffer); shader.SetBuffer(0, ShaderIDs.clusterBuffer, baseBuffer.clusterBuffer); shader.SetBuffer(0, ShaderIDs._IndexBuffer, indexBuffer); shader.SetBuffer(1, ShaderIDs._IndexBuffer, indexBuffer); shader.SetBuffer(1, ShaderIDs.verticesBuffer, baseBuffer.verticesBuffer); ComputeShaderUtility.Dispatch(shader, 0, result); shader.DispatchIndirect(1, baseBuffer.moveCountBuffer); } baseBuffer.clusterCount = result; loading = false; state = State.Unloaded; }