fna-workbench

fna-workbench Git Source Tree


Root/src/Graphics/ModelMesh.cs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
#region License
/* FNA - XNA4 Reimplementation for Desktop Platforms
 * Copyright 2009-2016 Ethan Lee and the MonoGame Team
 *
 * Released under the Microsoft Public License.
 * See LICENSE for details.
 */
#endregion
 
#region Using Statements
using System.Collections.Generic;
#endregion
 
namespace Microsoft.Xna.Framework.Graphics
{
    /// <summary>
    /// Represents a mesh that is part of a Model.
    /// </summary>
    public sealed class ModelMesh
    {
        #region Public Properties
 
        /// <summary>
        /// Gets the BoundingSphere that contains this mesh.
        /// </summary>
        public BoundingSphere BoundingSphere
        {
            get;
            internal set;
        }
 
        /// <summary>
        /// Gets a collection of effects associated with this mesh.
        /// </summary>
        public ModelEffectCollection Effects
        {
            get;
            private set;
        }
 
        /// <summary>
        /// Gets the ModelMeshPart objects that make up this mesh. Each part of a mesh
        /// is composed of a set of primitives that share the same material.
        /// </summary>
        public ModelMeshPartCollection MeshParts
        {
            get;
            private set;
        }
 
        /// <summary>
        /// Gets the name of this mesh.
        /// </summary>
        public string Name
        {
            get;
            internal set;
        }
 
        /// <summary>
        /// Gets the parent bone for this mesh. The parent bone of a mesh contains a
        /// transformation matrix that describes how the mesh is located relative to
        /// any parent meshes in a model.
        /// </summary>
        public ModelBone ParentBone
        {
            get;
            internal set;
        }
 
        /// <summary>
        /// Gets or sets an object identifying this mesh.
        /// </summary>
        public object Tag
        {
            get;
            set;
        }
 
        #endregion
 
        #region Private Variables
 
        private GraphicsDevice graphicsDevice;
 
        #endregion
 
        #region Public Constructors
 
        public ModelMesh(GraphicsDevice graphicsDevice, List<ModelMeshPart> parts)
        {
            // TODO: Complete member initialization
            this.graphicsDevice = graphicsDevice;
 
            MeshParts = new ModelMeshPartCollection(parts);
 
            foreach (ModelMeshPart part in parts)
            {
                part.parent = this;
            }
 
            Effects = new ModelEffectCollection();
        }
 
        #endregion
 
        #region Public Methods
 
        /// <summary>
        /// Draws all of the ModelMeshPart objects in this mesh, using their current
        /// Effect settings.
        /// </summary>
        public void Draw()
        {
            foreach (ModelMeshPart part in MeshParts)
            {
                Effect effect = part.Effect;
 
                if (part.PrimitiveCount > 0)
                {
                    graphicsDevice.SetVertexBuffer(part.VertexBuffer);
                    graphicsDevice.Indices = part.IndexBuffer;
 
                    foreach (EffectPass pass in effect.CurrentTechnique.Passes)
                    {
                        pass.Apply();
                        graphicsDevice.DrawIndexedPrimitives(
                            PrimitiveType.TriangleList,
                            part.VertexOffset,
                            0,
                            part.NumVertices,
                            part.StartIndex,
                            part.PrimitiveCount
                        );
                    }
                }
            }
        }
 
        #endregion
    }
}

Archive Download this file

Branches

Number of commits:
Page rendered in 0.08985s using 11 queries.