protected override void DoMainThreadWorks(List <MainThreadWork> works)
        {
            EnsureMeshBuilderBufferSize(works.Count);

            if (works.Count == 1)
            {
                Profiler.BeginSample("SectionMeshWorkScheduler.BuildMesh (MainThread)");

                Mesh           mesh    = m_MeshBuffer[0];
                MainThreadWork work    = works[0];
                SMeshBuilder   builder = m_MeshBuilderBuffer[0];
                builder.AddSection(work.Section, work.Accessor);
                builder.ApplyAndClearBuffers(mesh, SectionMeshTopology, false, Allocator.Temp);
                CalculateMeshNTBData(mesh);

                Profiler.EndSample();
            }
            else
            {
                Profiler.BeginSample("SectionMeshWorkScheduler.ParallelBuildMeshes (MainThread)");

                Mesh.MeshDataArray meshDataArray = Mesh.AllocateWritableMeshData(works.Count);
                BuildSectionMeshJob.Execute(meshDataArray, works, m_MeshBuilderBuffer);
                Mesh.ApplyAndDisposeWritableMeshData(meshDataArray, m_MeshBuffer, SectionMeshUpdateFlags);

                for (int i = 0; i < m_MeshBuffer.Count; i++)
                {
                    CalculateMeshNTBData(m_MeshBuffer[i]);
                }

                Profiler.EndSample();
            }
        }
            public static void Execute(Mesh.MeshDataArray meshes, List <MainThreadWork> works, List <SMeshBuilder> meshBuilders)
            {
                s_Works        = works;
                s_MeshBuilders = meshBuilders;

                BuildSectionMeshJob job = new BuildSectionMeshJob {
                    m_Meshes = meshes
                };

                job.Schedule(meshes.Length, 1).Complete();

                s_Works        = null;
                s_MeshBuilders = null;
            }