protected override void UpdateJob() { if (running == true) { age++; if (age > 2) { running = false; currentHandle.Complete(); var pendingMesh = SpawnMesh(); currentQuad.PendingMeshes.Add(pendingMesh); currentQuad.Points = pendingPoints; pendingMesh.indexFormat = UnityEngine.Rendering.IndexFormat.UInt32; pendingMesh.SetVertices(SgtHelper.ConvertNativeArray(positions)); pendingMesh.SetNormals(SgtHelper.ConvertNativeArray(normals)); pendingMesh.SetTangents(SgtHelper.ConvertNativeArray(tangents)); pendingMesh.SetUVs(0, SgtHelper.ConvertNativeArray(coords)); #if UNITY_2019_3_OR_NEWER pendingMesh.SetIndices(SgtHelper.ConvertNativeArray(indices), MeshTopology.Triangles, 0); #else pendingMesh.SetTriangles(SgtHelper.ConvertNativeArray(indices), 0); #endif pendingMesh.RecalculateBounds(); var min = (float3)pendingMesh.bounds.min; var max = (float3)pendingMesh.bounds.max; var ext = math.max(math.abs(min), math.abs(max)); pendingMesh.bounds = new Bounds(Vector3.zero, ext * 2.0f); pendingMesh.UploadMeshData(false); // Swap arrays pendingPoints = currentPoints; currentPoints = default(NativeArray <double3>); } } }