5 namespace SiliconStudio.
Paradox.Graphics
7 internal class VertexElementValidator
9 internal static int GetVertexStride(VertexElement[] elements)
12 for (
int i = 0; i < elements.Length; i++)
13 num2 += elements[i].Format.SizeInBytes();
17 internal static void Validate(
int vertexStride, VertexElement[] elements)
19 if (vertexStride <= 0)
21 throw new ArgumentOutOfRangeException(
"vertexStride");
23 if ((vertexStride & 3) != 0)
25 throw new ArgumentException(
"VertexElementOffsetNotMultipleFour");
27 int[] numArray =
new int[vertexStride];
28 for (
int i = 0; i < vertexStride; i++)
33 for (
int j = 0; j < elements.Length; j++)
35 int offset = elements[j].AlignedByteOffset;
36 if (offset == VertexElement.AppendAligned)
44 offset = totalOffset + elements[j - 1].Format.SizeInBytes();
48 int typeSize = elements[j].Format.SizeInBytes();
49 if ((offset < 0) || ((offset + typeSize) > vertexStride))
51 throw new ArgumentException(
"VertexElementOutsideStride");
53 if ((offset & 3) != 0)
55 throw new ArgumentException(
"VertexElementOffsetNotMultipleFour");
57 for (
int k = 0; k < j; k++)
59 if (elements[j].SemanticName == elements[k].SemanticName && elements[j].SemanticIndex == elements[k].SemanticIndex)
61 throw new ArgumentException(
"DuplicateVertexElement");
64 for (
int m = offset; m < (offset + typeSize); m++)
68 throw new ArgumentException(
"VertexElementsOverlap");