public void Execute(int index) { var count = input.BeginForEachIndex(index); if (count == 0) { return; } var brushIndexOrder = input.Read <IndexOrder>(); var brushNodeOrder = brushIndexOrder.nodeOrder; var vertexCount = input.Read <int>(); NativeCollectionHelpers.EnsureCapacityAndClear(ref brushVertices, vertexCount); for (int v = 0; v < vertexCount; v++) { var vertex = input.Read <float3>(); brushVertices.AddNoResize(vertex); } var surfaceOuterCount = input.Read <int>(); NativeCollectionHelpers.EnsureSizeAndClear(ref surfaceLoopIndices, surfaceOuterCount); for (int o = 0; o < surfaceOuterCount; o++) { var surfaceInnerCount = input.Read <int>(); if (surfaceInnerCount > 0) { var inner = surfaceLoopIndices.AllocateWithCapacityForIndex(o, surfaceInnerCount); //inner.ResizeUninitialized(surfaceInnerCount); for (int i = 0; i < surfaceInnerCount; i++) { inner.AddNoResize(input.Read <int>()); } } } var surfaceLoopCount = input.Read <int>(); NativeCollectionHelpers.EnsureMinimumSizeAndClear(ref surfaceLoopAllInfos, surfaceLoopCount); NativeCollectionHelpers.EnsureSizeAndClear(ref surfaceLoopAllEdges, surfaceLoopCount); for (int l = 0; l < surfaceLoopCount; l++) { surfaceLoopAllInfos[l] = input.Read <SurfaceInfo>(); var edgeCount = input.Read <int>(); if (edgeCount > 0) { var edgesInner = surfaceLoopAllEdges.AllocateWithCapacityForIndex(l, edgeCount); //edgesInner.ResizeUninitialized(edgeCount); for (int e = 0; e < edgeCount; e++) { edgesInner.AddNoResize(input.Read <Edge>()); } } } input.EndForEachIndex(); if (!basePolygonCache[brushNodeOrder].IsCreated) { return; } var maxLoops = 0; var maxIndices = 0; for (int s = 0; s < surfaceLoopIndices.Length; s++) { if (!surfaceLoopIndices.IsIndexCreated(s)) { continue; } var length = surfaceLoopIndices[s].Length; maxIndices += length; maxLoops = math.max(maxLoops, length); } ref var baseSurfaces = ref basePolygonCache[brushNodeOrder].Value.surfaces;
public void Execute(int index) { //var brushNodeIndex = treeBrushNodeIndices[index]; var count = input.BeginForEachIndex(index); if (count == 0) { return; } HashedVertices brushVertices; NativeListArray <int> surfaceLoopIndices; NativeList <SurfaceInfo> surfaceLoopAllInfos; NativeListArray <Edge> surfaceLoopAllEdges; var brushNodeIndex = input.Read <int>(); var vertexCount = input.Read <int>(); brushVertices = new HashedVertices(vertexCount, allocator); for (int v = 0; v < vertexCount; v++) { var vertex = input.Read <float3>(); brushVertices.AddNoResize(vertex); } var surfaceOuterCount = input.Read <int>(); surfaceLoopIndices = new NativeListArray <int>(surfaceOuterCount, allocator); surfaceLoopIndices.ResizeExact(surfaceOuterCount); for (int o = 0; o < surfaceOuterCount; o++) { var surfaceInnerCount = input.Read <int>(); if (surfaceInnerCount > 0) { var inner = surfaceLoopIndices.AllocateWithCapacityForIndex(o, surfaceInnerCount); //inner.ResizeUninitialized(surfaceInnerCount); for (int i = 0; i < surfaceInnerCount; i++) { inner.AddNoResize(input.Read <int>()); } } } var surfaceLoopCount = input.Read <int>(); surfaceLoopAllInfos = new NativeList <SurfaceInfo>(surfaceLoopCount, allocator); surfaceLoopAllEdges = new NativeListArray <Edge>(surfaceLoopCount, allocator); surfaceLoopAllInfos.ResizeUninitialized(surfaceLoopCount); surfaceLoopAllEdges.ResizeExact(surfaceLoopCount); for (int l = 0; l < surfaceLoopCount; l++) { surfaceLoopAllInfos[l] = input.Read <SurfaceInfo>(); var edgeCount = input.Read <int>(); if (edgeCount > 0) { var edgesInner = surfaceLoopAllEdges.AllocateWithCapacityForIndex(l, edgeCount); //edgesInner.ResizeUninitialized(edgeCount); for (int e = 0; e < edgeCount; e++) { edgesInner.AddNoResize(input.Read <Edge>()); } } } input.EndForEachIndex(); var maxLoops = 0; var maxIndices = 0; for (int s = 0; s < surfaceLoopIndices.Length; s++) { if (!surfaceLoopIndices.IsIndexCreated(s)) { continue; } var length = surfaceLoopIndices[s].Length; maxIndices += length; maxLoops = math.max(maxLoops, length); } ref var baseSurfaces = ref basePolygons[brushNodeIndex].Value.surfaces;