public void RenderParts(ExposedList <SubmeshInstruction> instructions, int startSubmesh, int endSubmesh) { LazyIntialize(); // STEP 1: Create instruction var smartMesh = buffers.GetNextMesh(); currentInstructions.SetWithSubset(instructions, startSubmesh, endSubmesh); bool updateTriangles = SkeletonRendererInstruction.GeometryNotEqual(currentInstructions, smartMesh.instructionUsed); // STEP 2: Generate mesh buffers. var currentInstructionsSubmeshesItems = currentInstructions.submeshInstructions.Items; meshGenerator.Begin(); if (currentInstructions.hasActiveClipping) { for (int i = 0; i < currentInstructions.submeshInstructions.Count; i++) { meshGenerator.AddSubmesh(currentInstructionsSubmeshesItems[i], updateTriangles); } } else { meshGenerator.BuildMeshWithArrays(currentInstructions, updateTriangles); } buffers.UpdateSharedMaterials(currentInstructions.submeshInstructions); // STEP 3: modify mesh. var mesh = smartMesh.mesh; if (meshGenerator.VertexCount <= 0) // Clear an empty mesh { updateTriangles = false; mesh.Clear(); } else { meshGenerator.FillVertexData(mesh); if (updateTriangles) { meshGenerator.FillTriangles(mesh); meshRenderer.sharedMaterials = buffers.GetUpdatedSharedMaterialsArray(); } else if (buffers.MaterialsChangedInLastUpdate()) { meshRenderer.sharedMaterials = buffers.GetUpdatedSharedMaterialsArray(); } } meshGenerator.FillLateVertexData(mesh); meshFilter.sharedMesh = mesh; smartMesh.instructionUsed.Set(currentInstructions); }
public void RenderParts(ExposedList <SubmeshInstruction> instructions, int startSubmesh, int endSubmesh) { this.LazyIntialize(); MeshRendererBuffers.SmartMesh nextMesh = this.buffers.GetNextMesh(); this.currentInstructions.SetWithSubset(instructions, startSubmesh, endSubmesh); bool updateTriangles = SkeletonRendererInstruction.GeometryNotEqual(this.currentInstructions, nextMesh.instructionUsed); SubmeshInstruction[] items = this.currentInstructions.submeshInstructions.Items; this.meshGenerator.Begin(); if (this.currentInstructions.hasActiveClipping) { for (int i = 0; i < this.currentInstructions.submeshInstructions.Count; i++) { this.meshGenerator.AddSubmesh(items[i], updateTriangles); } } else { this.meshGenerator.BuildMeshWithArrays(this.currentInstructions, updateTriangles); } this.buffers.UpdateSharedMaterials(this.currentInstructions.submeshInstructions); Mesh mesh = nextMesh.mesh; if (this.meshGenerator.VertexCount <= 0) { updateTriangles = false; mesh.Clear(); } else { this.meshGenerator.FillVertexData(mesh); if (updateTriangles) { this.meshGenerator.FillTriangles(mesh); this.meshRenderer.sharedMaterials = this.buffers.GetUpdatedSharedMaterialsArray(); } else if (this.buffers.MaterialsChangedInLastUpdate()) { this.meshRenderer.sharedMaterials = this.buffers.GetUpdatedSharedMaterialsArray(); } } this.meshGenerator.FillLateVertexData(mesh); this.meshFilter.sharedMesh = mesh; nextMesh.instructionUsed.Set(this.currentInstructions); }