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/ModelMeshCollection.cs
157 lines | 3.1 KiB | text/x-csharp | CSharpLexer
#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;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
#endregion
namespace Microsoft.Xna.Framework.Graphics
{
/// <summary>
/// Represents a collection of ModelMesh objects.
/// </summary>
public sealed class ModelMeshCollection : ReadOnlyCollection<ModelMesh>
{
#region Public Properties
/// <summary>
/// Retrieves a ModelMesh from the collection, given the name of the mesh.
/// </summary>
/// <param name="meshName">
/// The name of the mesh to retrieve.
/// </param>
public ModelMesh this[string meshName]
{
get
{
ModelMesh ret;
if (!this.TryGetValue(meshName, out ret))
{
throw new KeyNotFoundException();
}
return ret;
}
}
#endregion
#region Internal Constructor
internal ModelMeshCollection(IList<ModelMesh> list) : base(list)
{
}
#endregion
#region Public Methods
/// <summary>
/// Finds a mesh with a given name if it exists in the collection.
/// </summary>
/// <param name="meshName">
/// The name of the mesh to find.
/// </param>
/// <param name="value">
/// [OutAttribute] The mesh named meshName, if found.
/// </param>
public bool TryGetValue(string meshName, out ModelMesh value)
{
if (string.IsNullOrEmpty(meshName))
{
throw new ArgumentNullException("meshName");
}
foreach (ModelMesh mesh in this)
{
if (string.Compare(mesh.Name, meshName, StringComparison.Ordinal) == 0)
{
value = mesh;
return true;
}
}
value = null;
return false;
}
#endregion
#region Enumerator
/// <summary>
/// Returns a ModelMeshCollection.Enumerator that can iterate through a ModelMeshCollection.
/// </summary>
/// <returns></returns>
public new Enumerator GetEnumerator()
{
return new Enumerator(this);
}
/// <summary>
/// Provides the ability to iterate through the bones in an ModelMeshCollection.
/// </summary>
public struct Enumerator : IEnumerator<ModelMesh>
{
private readonly ModelMeshCollection collection;
private int position;
internal Enumerator(ModelMeshCollection collection)
{
this.collection = collection;
position = -1;
}
/// <summary>
/// Gets the current element in the ModelMeshCollection.
/// </summary>
public ModelMesh Current
{
get
{
return collection[position];
}
}
/// <summary>
/// Advances the enumerator to the next element of the ModelMeshCollection.
/// </summary>
public bool MoveNext()
{
position += 1;
return (position < collection.Count);
}
/// <summary>
/// Immediately releases the unmanaged resources used by this object.
/// </summary>
public void Dispose()
{
}
object IEnumerator.Current
{
get
{
return collection[position];
}
}
void IEnumerator.Reset()
{
position = -1;
}
}
#endregion
}
}