示例#1
0
        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);
        }