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();
            }
        }
            private void Execute(int index)
            {
                MainThreadWork work    = s_Works[index];
                SMeshBuilder   builder = s_MeshBuilders[index];

                builder.AddSection(work.Section, work.Accessor);
                builder.ApplyAndClearBuffers(m_Meshes[index], SectionMeshTopology);
            }