#region Using Statements using System; using System.Runtime.InteropServices; #endregion // Using Statements // 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.Graphics { public class VertexDeclaration : GraphicsResource { private int vertexStride; private VertexElement[] elements; public VertexDeclaration(params VertexElement[] elements) { this.elements = elements; for (int i = 0; i < this.elements.Length; i++) { this.vertexStride += GetElementStride(this.elements[i].VertexElementFormat); } } public VertexDeclaration(int vertexStride, params VertexElement[] elements) { this.elements = elements; this.vertexStride = vertexStride; } public override void Dispose() { throw new NotImplementedException(); } public int VertexStride { get { return this.vertexStride; } } public VertexElement[] GetVertexElements() { if (elements != null) { return elements.Clone() as VertexElement[]; } else { return null; } } protected override void Dispose([MarshalAs(UnmanagedType.U1)] bool disposeManaged) { throw new NotImplementedException(); } private int GetElementStride(VertexElementFormat format) { switch (format) { case VertexElementFormat.NormalizedShort2: case VertexElementFormat.Byte4: case VertexElementFormat.Color: case VertexElementFormat.HalfVector2: case VertexElementFormat.Short2: case VertexElementFormat.Single: return 4; case VertexElementFormat.HalfVector4: case VertexElementFormat.NormalizedShort4: case VertexElementFormat.Short4: case VertexElementFormat.Vector2: return 8; case VertexElementFormat.Vector3: return 12; case VertexElementFormat.Vector4: return 16; default: throw new ArgumentException("unknown VertexElementFormat size '" + format.ToString() + "'"); } } } }