Working on ModelMesh, ModelMeshCollection, ModelMeshPart and ModelMeshPartCollection tests
This commit is contained in:
parent
6c488dbca5
commit
bb4f7ccf2e
@ -80,6 +80,8 @@
|
||||
<Compile Include="Strukturen\Graphics\ModelEffectCollectionTest.cs" />
|
||||
<Compile Include="Strukturen\Graphics\ModelMeshCollectionTest.cs" />
|
||||
<Compile Include="Strukturen\Graphics\ModelMeshPartCollectionTest.cs" />
|
||||
<Compile Include="Strukturen\Graphics\ModelMeshPartTest.cs" />
|
||||
<Compile Include="Strukturen\Graphics\ModelMeshTest.cs" />
|
||||
<Compile Include="Strukturen\Graphics\SamplerStateCollectionTest.cs" />
|
||||
<Compile Include="Strukturen\Graphics\VertexPositionNormalTextureTest.cs" />
|
||||
<Compile Include="Strukturen\Graphics\VertexPositionColorTextureTest.cs" />
|
||||
|
@ -80,6 +80,8 @@
|
||||
<Compile Include="Strukturen\Graphics\ModelEffectCollectionTest.cs" />
|
||||
<Compile Include="Strukturen\Graphics\ModelMeshCollectionTest.cs" />
|
||||
<Compile Include="Strukturen\Graphics\ModelMeshPartCollectionTest.cs" />
|
||||
<Compile Include="Strukturen\Graphics\ModelMeshPartTest.cs" />
|
||||
<Compile Include="Strukturen\Graphics\ModelMeshTest.cs" />
|
||||
<Compile Include="Strukturen\Graphics\SamplerStateCollectionTest.cs" />
|
||||
<Compile Include="Strukturen\Graphics\VertexPositionNormalTextureTest.cs" />
|
||||
<Compile Include="Strukturen\Graphics\VertexPositionColorTextureTest.cs" />
|
||||
|
@ -81,6 +81,8 @@
|
||||
<Compile Include="Strukturen\Graphics\ModelEffectCollectionTest.cs" />
|
||||
<Compile Include="Strukturen\Graphics\ModelMeshCollectionTest.cs" />
|
||||
<Compile Include="Strukturen\Graphics\ModelMeshPartCollectionTest.cs" />
|
||||
<Compile Include="Strukturen\Graphics\ModelMeshPartTest.cs" />
|
||||
<Compile Include="Strukturen\Graphics\ModelMeshTest.cs" />
|
||||
<Compile Include="Strukturen\Graphics\SamplerStateCollectionTest.cs" />
|
||||
<Compile Include="Strukturen\Graphics\VertexPositionNormalTextureTest.cs" />
|
||||
<Compile Include="Strukturen\Graphics\VertexPositionColorTextureTest.cs" />
|
||||
|
@ -82,6 +82,8 @@
|
||||
<Compile Include="Strukturen\Graphics\ModelEffectCollectionTest.cs" />
|
||||
<Compile Include="Strukturen\Graphics\ModelMeshCollectionTest.cs" />
|
||||
<Compile Include="Strukturen\Graphics\ModelMeshPartCollectionTest.cs" />
|
||||
<Compile Include="Strukturen\Graphics\ModelMeshPartTest.cs" />
|
||||
<Compile Include="Strukturen\Graphics\ModelMeshTest.cs" />
|
||||
<Compile Include="Strukturen\Graphics\SamplerStateCollectionTest.cs" />
|
||||
<Compile Include="Strukturen\Graphics\VertexPositionNormalTextureTest.cs" />
|
||||
<Compile Include="Strukturen\Graphics\VertexPositionColorTextureTest.cs" />
|
||||
|
@ -1,4 +1,12 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Globalization;
|
||||
using System.Reflection;
|
||||
using ANX.Framework.Graphics;
|
||||
using NUnit.Framework;
|
||||
|
||||
using XNAModelMesh = Microsoft.Xna.Framework.Graphics.ModelMesh;
|
||||
using XNAModelMeshCollection = Microsoft.Xna.Framework.Graphics.ModelMeshCollection;
|
||||
|
||||
// This file is part of the ANX.Framework created by the
|
||||
// "ANX.Framework developer group" and released under the Ms-PL license.
|
||||
@ -8,5 +16,73 @@ namespace ANX.Framework.TestCenter.Strukturen.Graphics
|
||||
{
|
||||
class ModelMeshCollectionTest
|
||||
{
|
||||
[Test]
|
||||
public void Constructor()
|
||||
{
|
||||
XNAModelMeshCollection xna;
|
||||
ModelMeshCollection anx;
|
||||
CreateCollections(out xna, out anx);
|
||||
|
||||
Assert.AreEqual(xna.Count, anx.Count);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void AccessorArgumentNull()
|
||||
{
|
||||
XNAModelMeshCollection xna;
|
||||
ModelMeshCollection anx;
|
||||
CreateCollections(out xna, out anx);
|
||||
|
||||
TestDelegate xnaDeleg = delegate { XNAModelMesh xnaMesh = xna[""]; };
|
||||
TestDelegate anxDeleg = delegate { ModelMesh anxMesh = anx[""]; };
|
||||
|
||||
AssertHelper.ConvertEquals(Assert.Throws<ArgumentNullException>(xnaDeleg),
|
||||
Assert.Throws<ArgumentNullException>(anxDeleg), "AccessorArgumentNull");
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void AccessorKeyNotFound()
|
||||
{
|
||||
XNAModelMeshCollection xna;
|
||||
ModelMeshCollection anx;
|
||||
CreateCollections(out xna, out anx);
|
||||
|
||||
TestDelegate xnaDeleg = delegate { XNAModelMesh xnaMesh = xna["test"]; };
|
||||
TestDelegate anxDeleg = delegate { ModelMesh anxMesh = anx["test"]; };
|
||||
|
||||
AssertHelper.ConvertEquals(Assert.Throws<KeyNotFoundException>(xnaDeleg),
|
||||
Assert.Throws<KeyNotFoundException>(anxDeleg), "AccessorKeyNotFound");
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Accessor()
|
||||
{
|
||||
XNAModelMeshCollection xna;
|
||||
ModelMeshCollection anx;
|
||||
CreateCollections(out xna, out anx);
|
||||
|
||||
XNAModelMesh xnaMesh = xna["mesh1"];
|
||||
ModelMesh anxMesh = anx["mesh1"];
|
||||
|
||||
Assert.AreEqual(xnaMesh.Name, anxMesh.Name);
|
||||
Assert.AreEqual(xnaMesh.Tag, anxMesh.Tag);
|
||||
Assert.AreEqual(xnaMesh.ParentBone, anxMesh.ParentBone);
|
||||
Assert.AreEqual(xnaMesh.MeshParts.Count, anxMesh.MeshParts.Count);
|
||||
AssertHelper.ConvertEquals(xnaMesh.BoundingSphere, anxMesh.BoundingSphere, "Accessor");
|
||||
}
|
||||
|
||||
private void CreateCollections(out XNAModelMeshCollection xna, out ModelMeshCollection anx)
|
||||
{
|
||||
XNAModelMesh xnaMesh;
|
||||
ModelMesh anxMesh;
|
||||
ModelMeshTest.CreateMeshes(out xnaMesh, out anxMesh);
|
||||
var xnaParameters = new object[] { new[] { xnaMesh } };
|
||||
xna = (XNAModelMeshCollection)Activator.CreateInstance(typeof(XNAModelMeshCollection),
|
||||
BindingFlags.NonPublic | BindingFlags.Instance, null, xnaParameters, CultureInfo.InvariantCulture);
|
||||
|
||||
var anxParameters = new object[] { new[] { anxMesh } };
|
||||
anx = (ModelMeshCollection)Activator.CreateInstance(typeof(ModelMeshCollection),
|
||||
BindingFlags.NonPublic | BindingFlags.Instance, null, anxParameters, CultureInfo.InvariantCulture);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,4 +1,11 @@
|
||||
using System;
|
||||
using System.Globalization;
|
||||
using System.Reflection;
|
||||
using ANX.Framework.Graphics;
|
||||
using NUnit.Framework;
|
||||
|
||||
using XNAModelMeshPart = Microsoft.Xna.Framework.Graphics.ModelMeshPart;
|
||||
using XNAModelMeshPartCollection = Microsoft.Xna.Framework.Graphics.ModelMeshPartCollection;
|
||||
|
||||
// This file is part of the ANX.Framework created by the
|
||||
// "ANX.Framework developer group" and released under the Ms-PL license.
|
||||
@ -8,5 +15,28 @@ namespace ANX.Framework.TestCenter.Strukturen.Graphics
|
||||
{
|
||||
class ModelMeshPartCollectionTest
|
||||
{
|
||||
[Test]
|
||||
public void Constructor()
|
||||
{
|
||||
XNAModelMeshPartCollection xna;
|
||||
ModelMeshPartCollection anx;
|
||||
CreateCollections(out xna, out anx);
|
||||
|
||||
Assert.AreEqual(xna.Count, anx.Count);
|
||||
}
|
||||
|
||||
private void CreateCollections(out XNAModelMeshPartCollection xna, out ModelMeshPartCollection anx)
|
||||
{
|
||||
XNAModelMeshPart xnaMesh;
|
||||
ModelMeshPart anxMesh;
|
||||
ModelMeshPartTest.CreateMeshes(out xnaMesh, out anxMesh);
|
||||
var xnaParameters = new object[] { new[] { xnaMesh } };
|
||||
xna = (XNAModelMeshPartCollection)Activator.CreateInstance(typeof(XNAModelMeshPartCollection),
|
||||
BindingFlags.NonPublic | BindingFlags.Instance, null, xnaParameters, CultureInfo.InvariantCulture);
|
||||
|
||||
var anxParameters = new object[] { new[] { anxMesh } };
|
||||
anx = (ModelMeshPartCollection)Activator.CreateInstance(typeof(ModelMeshPartCollection),
|
||||
BindingFlags.NonPublic | BindingFlags.Instance, null, anxParameters, CultureInfo.InvariantCulture);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,42 @@
|
||||
using System;
|
||||
using System.Globalization;
|
||||
using System.Reflection;
|
||||
using ANX.Framework.Graphics;
|
||||
using NUnit.Framework;
|
||||
|
||||
using XNAModelMeshPart = Microsoft.Xna.Framework.Graphics.ModelMeshPart;
|
||||
|
||||
// This file is part of the ANX.Framework created by the
|
||||
// "ANX.Framework developer group" and released under the Ms-PL license.
|
||||
// For details see: http://anxframework.codeplex.com/license
|
||||
|
||||
namespace ANX.Framework.TestCenter.Strukturen.Graphics
|
||||
{
|
||||
class ModelMeshPartTest
|
||||
{
|
||||
[Test]
|
||||
public void Constructor()
|
||||
{
|
||||
XNAModelMeshPart xna;
|
||||
ModelMeshPart anx;
|
||||
CreateMeshes(out xna, out anx);
|
||||
|
||||
Assert.AreEqual(xna.StartIndex, anx.StartIndex);
|
||||
Assert.AreEqual(xna.Tag, anx.Tag);
|
||||
Assert.AreEqual(xna.VertexOffset, anx.VertexOffset);
|
||||
Assert.AreEqual(xna.PrimitiveCount, anx.PrimitiveCount);
|
||||
Assert.AreEqual(xna.NumVertices, anx.NumVertices);
|
||||
}
|
||||
|
||||
public static void CreateMeshes(out XNAModelMeshPart xna, out ModelMeshPart anx)
|
||||
{
|
||||
var parameters = new object[] { 4, 64, 0, 20, 777 };
|
||||
|
||||
xna = (XNAModelMeshPart)Activator.CreateInstance(typeof(XNAModelMeshPart),
|
||||
BindingFlags.NonPublic | BindingFlags.Instance, null, parameters, CultureInfo.InvariantCulture);
|
||||
|
||||
anx = (ModelMeshPart)Activator.CreateInstance(typeof(ModelMeshPart),
|
||||
BindingFlags.NonPublic | BindingFlags.Instance, null, parameters, CultureInfo.InvariantCulture);
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,60 @@
|
||||
using System;
|
||||
using System.Globalization;
|
||||
using System.Reflection;
|
||||
using ANX.Framework.Graphics;
|
||||
using NUnit.Framework;
|
||||
|
||||
using XNAModelMesh = Microsoft.Xna.Framework.Graphics.ModelMesh;
|
||||
using XNAModelMeshPart = Microsoft.Xna.Framework.Graphics.ModelMeshPart;
|
||||
using XNABoundingSphere = Microsoft.Xna.Framework.BoundingSphere;
|
||||
using XNAVector3 = Microsoft.Xna.Framework.Vector3;
|
||||
|
||||
// This file is part of the ANX.Framework created by the
|
||||
// "ANX.Framework developer group" and released under the Ms-PL license.
|
||||
// For details see: http://anxframework.codeplex.com/license
|
||||
|
||||
namespace ANX.Framework.TestCenter.Strukturen.Graphics
|
||||
{
|
||||
class ModelMeshTest
|
||||
{
|
||||
[Test]
|
||||
public void Constructor()
|
||||
{
|
||||
XNAModelMesh xna;
|
||||
ModelMesh anx;
|
||||
CreateMeshes(out xna, out anx);
|
||||
|
||||
Assert.AreEqual(xna.Name, anx.Name);
|
||||
Assert.AreEqual(xna.Tag, anx.Tag);
|
||||
Assert.AreEqual(xna.ParentBone, anx.ParentBone);
|
||||
Assert.AreEqual(xna.MeshParts.Count, anx.MeshParts.Count);
|
||||
Assert.AreEqual(xna.Effects.Count, anx.Effects.Count);
|
||||
AssertHelper.ConvertEquals(xna.BoundingSphere, anx.BoundingSphere, "Constructor");
|
||||
}
|
||||
|
||||
public static void CreateMeshes(out XNAModelMesh xna, out ModelMesh anx)
|
||||
{
|
||||
var xnaParameters = new object[]
|
||||
{
|
||||
"mesh1",
|
||||
null,
|
||||
new XNABoundingSphere(XNAVector3.UnitY, 2f),
|
||||
new XNAModelMeshPart[0],
|
||||
17
|
||||
};
|
||||
xna = (XNAModelMesh)Activator.CreateInstance(typeof(XNAModelMesh),
|
||||
BindingFlags.NonPublic | BindingFlags.Instance, null, xnaParameters, CultureInfo.InvariantCulture);
|
||||
|
||||
var anxParameters = new object[]
|
||||
{
|
||||
"mesh1",
|
||||
null,
|
||||
new BoundingSphere(Vector3.UnitY, 2f),
|
||||
new ModelMeshPart[0],
|
||||
17
|
||||
};
|
||||
anx = (ModelMesh)Activator.CreateInstance(typeof(ModelMesh),
|
||||
BindingFlags.NonPublic | BindingFlags.Instance, null, anxParameters, CultureInfo.InvariantCulture);
|
||||
}
|
||||
}
|
||||
}
|
@ -1,7 +1,5 @@
|
||||
#region Using Statements
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using ANX.Framework.NonXNA.Development;
|
||||
|
||||
#endregion // Using Statements
|
||||
@ -14,10 +12,10 @@ namespace ANX.Framework.Graphics
|
||||
{
|
||||
[PercentageComplete(100)]
|
||||
[Developer("Glatzemann")]
|
||||
[TestState(TestStateAttribute.TestState.Untested)]
|
||||
[TestState(TestStateAttribute.TestState.InProgress)]
|
||||
public sealed class ModelMesh
|
||||
{
|
||||
private BoundingSphere boundingSphere;
|
||||
private readonly BoundingSphere boundingSphere;
|
||||
|
||||
public BoundingSphere BoundingSphere
|
||||
{
|
||||
@ -30,7 +28,7 @@ namespace ANX.Framework.Graphics
|
||||
public ModelBone ParentBone { get; private set; }
|
||||
public object Tag { get; set; }
|
||||
|
||||
public ModelMesh(string name, ModelBone bone, BoundingSphere sphere, ModelMeshPart[] meshParts, Object tag)
|
||||
internal ModelMesh(string name, ModelBone bone, BoundingSphere sphere, ModelMeshPart[] meshParts, Object tag)
|
||||
{
|
||||
this.Name = name;
|
||||
this.ParentBone = bone;
|
||||
@ -42,10 +40,8 @@ namespace ANX.Framework.Graphics
|
||||
foreach (var item in this.MeshParts)
|
||||
{
|
||||
item.parentMesh = this;
|
||||
if (item.Effect != null && !this.Effects.Contains(item.Effect))
|
||||
{
|
||||
this.Effects.Add(item.Effect);
|
||||
}
|
||||
if (item.Effect != null && Effects.Contains(item.Effect) == false)
|
||||
Effects.Add(item.Effect);
|
||||
}
|
||||
}
|
||||
|
||||
@ -56,31 +52,21 @@ namespace ANX.Framework.Graphics
|
||||
|
||||
foreach (var item in MeshParts)
|
||||
{
|
||||
if (object.ReferenceEquals(item, part))
|
||||
{
|
||||
if (ReferenceEquals(item, part))
|
||||
continue;
|
||||
}
|
||||
|
||||
if (object.ReferenceEquals(item.Effect, oldEffect))
|
||||
{
|
||||
if (ReferenceEquals(item.Effect, oldEffect))
|
||||
oldEffectIsInUse = true;
|
||||
}
|
||||
|
||||
if (object.ReferenceEquals(item.Effect, newEffect))
|
||||
{
|
||||
if (ReferenceEquals(item.Effect, newEffect))
|
||||
newEffectIsKnown = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (oldEffect != null && !oldEffectIsInUse)
|
||||
{
|
||||
Effects.Remove(oldEffect);
|
||||
}
|
||||
|
||||
if (newEffect != null && !newEffectIsKnown)
|
||||
{
|
||||
Effects.Add(newEffect);
|
||||
}
|
||||
}
|
||||
|
||||
public void Draw()
|
||||
@ -94,7 +80,8 @@ namespace ANX.Framework.Graphics
|
||||
GraphicsDevice graphics = part.VertexBuffer.GraphicsDevice;
|
||||
graphics.SetVertexBuffer(part.VertexBuffer, part.VertexOffset);
|
||||
graphics.Indices = part.IndexBuffer;
|
||||
graphics.DrawIndexedPrimitives(PrimitiveType.TriangleList, 0, 0, part.NumVertices, part.StartIndex, part.PrimitiveCount);
|
||||
graphics.DrawIndexedPrimitives(PrimitiveType.TriangleList, 0, 0, part.NumVertices, part.StartIndex,
|
||||
part.PrimitiveCount);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -15,70 +15,29 @@ namespace ANX.Framework.Graphics
|
||||
{
|
||||
[PercentageComplete(100)]
|
||||
[Developer("Glatzemann, AstrorEnales")]
|
||||
[TestState(TestStateAttribute.TestState.InProgress)]
|
||||
[TestState(TestStateAttribute.TestState.Tested)]
|
||||
public sealed class ModelMeshCollection : ReadOnlyCollection<ModelMesh>
|
||||
{
|
||||
private readonly ModelMesh[] modelMeshes;
|
||||
|
||||
public ModelMesh this[string meshName]
|
||||
{
|
||||
get
|
||||
{
|
||||
ModelMesh result;
|
||||
if (TryGetValue(meshName, out result) == false)
|
||||
throw new KeyNotFoundException();
|
||||
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
internal ModelMeshCollection(ModelMesh[] modelMeshes)
|
||||
: base(modelMeshes)
|
||||
{
|
||||
this.modelMeshes = modelMeshes;
|
||||
}
|
||||
|
||||
public new Enumerator GetEnumerator()
|
||||
{
|
||||
return new Enumerator(this.modelMeshes);
|
||||
}
|
||||
|
||||
public struct Enumerator : IEnumerator<ModelMesh>, IDisposable, IEnumerator
|
||||
{
|
||||
private readonly ModelMesh[] wrappedArray;
|
||||
private int position;
|
||||
|
||||
internal Enumerator(ModelMesh[] wrappedArray)
|
||||
{
|
||||
this.wrappedArray = wrappedArray;
|
||||
this.position = -1;
|
||||
}
|
||||
|
||||
public ModelMesh Current
|
||||
{
|
||||
get
|
||||
{
|
||||
return this.wrappedArray[this.position];
|
||||
}
|
||||
}
|
||||
|
||||
public bool MoveNext()
|
||||
{
|
||||
this.position++;
|
||||
if (this.position >= this.wrappedArray.Length)
|
||||
{
|
||||
this.position = this.wrappedArray.Length;
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
void IEnumerator.Reset()
|
||||
{
|
||||
this.position = -1;
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
}
|
||||
|
||||
object IEnumerator.Current
|
||||
{
|
||||
get
|
||||
{
|
||||
return this.Current;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public bool TryGetValue(string meshName, out ModelMesh value)
|
||||
{
|
||||
if (String.IsNullOrEmpty(meshName))
|
||||
@ -98,16 +57,50 @@ namespace ANX.Framework.Graphics
|
||||
return false;
|
||||
}
|
||||
|
||||
public ModelMesh this[string meshName]
|
||||
public new Enumerator GetEnumerator()
|
||||
{
|
||||
get
|
||||
return new Enumerator(this.modelMeshes);
|
||||
}
|
||||
|
||||
public struct Enumerator : IEnumerator<ModelMesh>, IDisposable, IEnumerator
|
||||
{
|
||||
private readonly ModelMesh[] wrappedArray;
|
||||
private int position;
|
||||
|
||||
public ModelMesh Current
|
||||
{
|
||||
ModelMesh result;
|
||||
if (TryGetValue(meshName, out result) == false)
|
||||
get { return this.wrappedArray[this.position]; }
|
||||
}
|
||||
|
||||
object IEnumerator.Current
|
||||
{
|
||||
get { return this.Current; }
|
||||
}
|
||||
|
||||
internal Enumerator(ModelMesh[] wrappedArray)
|
||||
{
|
||||
this.wrappedArray = wrappedArray;
|
||||
this.position = -1;
|
||||
}
|
||||
|
||||
public bool MoveNext()
|
||||
{
|
||||
this.position++;
|
||||
if (this.position >= this.wrappedArray.Length)
|
||||
{
|
||||
throw new KeyNotFoundException();
|
||||
this.position = this.wrappedArray.Length;
|
||||
return false;
|
||||
}
|
||||
return result;
|
||||
return true;
|
||||
}
|
||||
|
||||
void IEnumerator.Reset()
|
||||
{
|
||||
this.position = -1;
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -12,7 +12,7 @@ namespace ANX.Framework.Graphics
|
||||
{
|
||||
[PercentageComplete(100)]
|
||||
[Developer("Glatzemann")]
|
||||
[TestState(TestStateAttribute.TestState.Untested)]
|
||||
[TestState(TestStateAttribute.TestState.InProgress)]
|
||||
public sealed class ModelMeshPart
|
||||
{
|
||||
#region Private
|
||||
|
@ -33,21 +33,15 @@ namespace ANX.Framework.Graphics
|
||||
private readonly ModelMeshPart[] wrappedArray;
|
||||
private int position;
|
||||
|
||||
public ModelMeshPart Current
|
||||
{
|
||||
get
|
||||
{
|
||||
return this.wrappedArray[this.position];
|
||||
}
|
||||
}
|
||||
public ModelMeshPart Current
|
||||
{
|
||||
get { return this.wrappedArray[this.position]; }
|
||||
}
|
||||
|
||||
object IEnumerator.Current
|
||||
{
|
||||
get
|
||||
{
|
||||
return this.Current;
|
||||
}
|
||||
}
|
||||
object IEnumerator.Current
|
||||
{
|
||||
get { return this.Current; }
|
||||
}
|
||||
|
||||
internal Enumerator(ModelMeshPart[] wrappedArray)
|
||||
{
|
||||
|
Loading…
x
Reference in New Issue
Block a user