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