Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
VertexElementValidator.cs
Go to the documentation of this file.
1using System;
3
5
6internal static class VertexElementValidator
7{
8 internal static int GetVertexStride(VertexElement[] elements)
9 {
10 int num = 0;
11 for (int i = 0; i < elements.Length; i++)
12 {
13 int num2 = elements[i].Offset + GetTypeSize(elements[i].VertexElementFormat);
14 if (num < num2)
15 {
16 num = num2;
17 }
18 }
19 return num;
20 }
21
22 internal static void Validate(int vertexStride, VertexElement[] elements)
23 {
24 if (vertexStride <= 0)
25 {
26 throw new ArgumentOutOfRangeException("vertexStride");
27 }
28 if (((uint)vertexStride & 3u) != 0)
29 {
31 }
32 int[] array = new int[vertexStride];
33 for (int i = 0; i < vertexStride; i++)
34 {
35 array[i] = -1;
36 }
37 for (int j = 0; j < elements.Length; j++)
38 {
39 int offset = elements[j].Offset;
40 int typeSize = GetTypeSize(elements[j].VertexElementFormat);
41 if (elements[j].VertexElementUsage < VertexElementUsage.Position || elements[j].VertexElementUsage > VertexElementUsage.TessellateFactor)
42 {
44 {
45 elements[j].VertexElementUsage,
46 string.Empty
47 }));
48 }
49 if (offset < 0 || offset + typeSize > vertexStride)
50 {
52 {
53 elements[j].VertexElementUsage,
54 elements[j].UsageIndex
55 }));
56 }
57 if (((uint)offset & 3u) != 0)
58 {
60 }
61 for (int k = 0; k < j; k++)
62 {
63 if (elements[j].VertexElementUsage == elements[k].VertexElementUsage && elements[j].UsageIndex == elements[k].UsageIndex)
64 {
66 {
67 elements[j].VertexElementUsage,
68 elements[j].UsageIndex
69 }));
70 }
71 }
72 for (int l = offset; l < offset + typeSize; l++)
73 {
74 if (array[l] >= 0)
75 {
77 }
78 array[l] = j;
79 }
80 }
81 }
82
83 internal static void Validate(int vertexStride, VertexElement[] elements, ProfileCapabilities profile)
84 {
85 Validate(vertexStride, elements);
86 if (vertexStride > profile.MaxStreamStride)
87 {
89 }
90 if (elements.Length > profile.MaxVertexStreams)
91 {
93 }
94 for (int i = 0; i < elements.Length; i++)
95 {
96 if (!profile.ValidVertexFormats.Contains(elements[i].VertexElementFormat))
97 {
99 }
100 if (elements[i].UsageIndex < 0 || elements[i].UsageIndex >= profile.MaxVertexStreams)
101 {
103 {
104 elements[i].VertexElementUsage,
105 elements[i].UsageIndex
106 }));
107 }
108 }
109 }
110
112 {
113 return format switch
114 {
115 VertexElementFormat.Single => 4,
116 VertexElementFormat.Vector2 => 8,
117 VertexElementFormat.Vector3 => 12,
118 VertexElementFormat.Vector4 => 16,
119 VertexElementFormat.Color => 4,
120 VertexElementFormat.Byte4 => 4,
121 VertexElementFormat.Short2 => 4,
122 VertexElementFormat.Short4 => 8,
123 VertexElementFormat.NormalizedShort2 => 4,
124 VertexElementFormat.NormalizedShort4 => 8,
125 VertexElementFormat.HalfVector2 => 4,
126 VertexElementFormat.HalfVector4 => 8,
127 _ => 0,
128 };
129 }
130}
static void Validate(int vertexStride, VertexElement[] elements, ProfileCapabilities profile)
static void Validate(int vertexStride, VertexElement[] elements)
static CultureInfo CurrentCulture