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>);
                }
            }
        }