Show More
Commit Description:
Add timers for Simulation and various engines...
Commit Description:
Add timers for Simulation and various engines Starting to add additional timers for different stages of the process of updating in order to get more insight into what is slowing it down. The update takes 9ms, which is much longer than it used to. Engine-specific timers are coming later.
File last commit:
Show/Diff file:
Action:
FNA/src/Graphics/ModelMesh.cs
142 lines | 2.8 KiB | text/x-csharp | CSharpLexer
Early working version (including all dependencies, lol).
r0 #region License
/* FNA - XNA4 Reimplementation for Desktop Platforms
* Copyright 2009-2020 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 Internal Constructor
internal 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
}
}