void Awake() { current = this; clusterBuffer = new ComputeBuffer(allRenderers.Count, sizeof(float3x4)); NativeArray <float3x4> clusterArray = new NativeArray <float3x4>(allRenderers.Count, Allocator.Temp, NativeArrayOptions.UninitializedMemory); for (int i = 0; i < clusterArray.Length; ++i) { Matrix4x4 mat = allRenderers[i].localToWorldMatrix; clusterArray[i] = float3x4((Vector3)mat.GetColumn(0), (Vector3)mat.GetColumn(1), (Vector3)mat.GetColumn(2), (Vector3)mat.GetColumn(3)); } clusterBuffer.SetData(clusterArray); clusterArray.Dispose(); resultBuffer = new ComputeBuffer(allRenderers.Count, sizeof(int)); instanceCountBuffer = new ComputeBuffer(5, sizeof(int), ComputeBufferType.IndirectArguments); Vector3[] vertices = occluderMesh.vertices; int[] tris = occluderMesh.triangles; verticesBuffer = new ComputeBuffer(tris.Length, sizeof(float3)); NativeArray <float3> verts = new NativeArray <float3>(tris.Length, Allocator.Temp, NativeArrayOptions.UninitializedMemory); for (int i = 0; i < verts.Length; ++i) { verts[i] = vertices[tris[i]]; } NativeArray <uint> args = new NativeArray <uint>(5, Allocator.Temp, NativeArrayOptions.ClearMemory); args[0] = (uint)verts.Length; instanceCountBuffer.SetData(args); verticesBuffer.SetData(verts); args.Dispose(); verts.Dispose(); }
private void OnDestroy() { current = null; }