Cogs.Core
VertexFormats.cpp
1#include "VertexFormats.h"
2
3void Cogs::Core::VertexFormats::initialize()
4{
5 static bool initialized = false;
6
7 if (initialized) return;
8
9 {
10 VertexElement position2Element = { 0, DataFormat::X32Y32_FLOAT, ElementSemantic::Position, 0, InputType::VertexData, 0 };
11 VertexElement positionElement = { 0, DataFormat::X32Y32Z32_FLOAT, ElementSemantic::Position, 0, InputType::VertexData, 0 };
12 VertexElement normalElement = { 0, DataFormat::X32Y32Z32_FLOAT, ElementSemantic::Normal, 0, InputType::VertexData, 0 };
13 VertexElement tangentElement = { 0, DataFormat::X32Y32Z32_FLOAT, ElementSemantic::Tangent, 0, InputType::VertexData, 0 };
14 VertexElement tangent4Element = { 0, DataFormat::X32Y32Z32W32_FLOAT, ElementSemantic::Tangent, 0, InputType::VertexData, 0 };
15 VertexElement bitangentElement = { 0, DataFormat::X32Y32Z32_FLOAT, ElementSemantic::Tangent, 1, InputType::VertexData, 0 };
16 VertexElement texCoordsElement = { 0, DataFormat::X32Y32_FLOAT, ElementSemantic::TextureCoordinate, 0, InputType::VertexData, 0 };
17 VertexElement texCoords1Element = { 0, DataFormat::X32Y32_FLOAT, ElementSemantic::TextureCoordinate, 1, InputType::VertexData, 0 };
18 VertexElement colorElement = { 0, DataFormat::X32Y32Z32W32_FLOAT, ElementSemantic::Color, 0, InputType::VertexData, 0 };
19
20 Pos2f = Cogs::VertexFormats::createVertexFormat(position2Element);
21 Pos3f = Cogs::VertexFormats::createVertexFormat(positionElement);
22 Norm3f = Cogs::VertexFormats::createVertexFormat(normalElement);
23 Tang3f = Cogs::VertexFormats::createVertexFormat(tangentElement);
24 Tang4f = Cogs::VertexFormats::createVertexFormat(tangent4Element);
25 Bitang3f = Cogs::VertexFormats::createVertexFormat(bitangentElement);
26 Tex2f = Cogs::VertexFormats::createVertexFormat(texCoordsElement);
27 Tex2f1 = Cogs::VertexFormats::createVertexFormat(texCoords1Element);
28 Color4f = Cogs::VertexFormats::createVertexFormat(colorElement);
29
30 VertexElement position4Element = { 0, DataFormat::X32Y32Z32W32_FLOAT, ElementSemantic::Position, 0, InputType::VertexData, 0 };
31
32 Pos4f = Cogs::VertexFormats::createVertexFormat(position4Element);
33 }
34
35 {
36 VertexElement normalElement = { 0, DataFormat::R8G8B8A8_SINT, ElementSemantic::Normal, 0, InputType::VertexData, 0 };
37 Norm4s8 = Cogs::VertexFormats::createVertexFormat(normalElement);
38 }
39
40 {
41 VertexElement normalElement = { 0, DataFormat::R10G10B10A2_UNORM, ElementSemantic::Normal, 0, InputType::VertexData, 0 };
42 Norm10 = Cogs::VertexFormats::createVertexFormat(normalElement);
43 }
44
45 {
46 VertexElement elements[] = {
47 { 0, DataFormat::X32Y32Z32W32_FLOAT, ElementSemantic::Position, 0, InputType::VertexData, 0 },
48 { 4 * sizeof(float), DataFormat::X32Y32Z32W32_FLOAT, ElementSemantic::Color, 0, InputType::VertexData, 0 },
49 };
50
51 Pos4fColor4f = Cogs::VertexFormats::createVertexFormat(elements, std::size(elements));
52 }
53
54 {
55 VertexElement elements[] = {
56 { 0, DataFormat::X32Y32Z32_FLOAT, ElementSemantic::Position, 0, InputType::VertexData, 0 },
57 { 3 * sizeof(float), DataFormat::X32Y32Z32_FLOAT, ElementSemantic::Normal, 0, InputType::VertexData, 0 },
58 { 6 * sizeof(float), DataFormat::X32Y32Z32_FLOAT, ElementSemantic::Tangent, 0, InputType::VertexData, 0 },
59 { 9 * sizeof(float), DataFormat::X32Y32_FLOAT, ElementSemantic::TextureCoordinate, 0, InputType::VertexData, 0 }
60 };
61
62 Pos3fNorm3fTan3fTex2f = Cogs::VertexFormats::createVertexFormat(elements, std::size(elements));
63 }
64
65 {
66 VertexElement elements[] = {
67 { 0, DataFormat::X32Y32Z32_FLOAT, ElementSemantic::Position, 0, InputType::VertexData, 0 },
68 { 3 * sizeof(float), DataFormat::X32Y32Z32_FLOAT, ElementSemantic::Normal, 0, InputType::VertexData, 0 },
69 };
70
71 Pos3fNorm3f = Cogs::VertexFormats::createVertexFormat(elements, std::size(elements));
72 }
73
74 {
75 VertexElement elements[] = {
76 { 0, DataFormat::X32Y32Z32_FLOAT, ElementSemantic::Position, 0, InputType::VertexData, 0 },
77 { 3 * sizeof(float), DataFormat::X32Y32Z32_FLOAT, ElementSemantic::Normal, 0, InputType::VertexData, 0 },
78 { 6 * sizeof(float), DataFormat::X32Y32_FLOAT, ElementSemantic::TextureCoordinate, 0, InputType::VertexData, 0 },
79 };
80
81 Pos3fNorm3fTex2f = Cogs::VertexFormats::createVertexFormat(elements, std::size(elements));
82 }
83
84 {
85 VertexElement elements[] = {
86 { 0, DataFormat::X32Y32Z32_FLOAT, ElementSemantic::Position, 0, InputType::VertexData, 0 },
87 { 3 * sizeof(float), DataFormat::R8G8B8A8_SINT, ElementSemantic::Normal, 0, InputType::VertexData, 0 },
88 { 3 * sizeof(float) + sizeof(uint32_t), DataFormat::X32Y32_FLOAT, ElementSemantic::TextureCoordinate, 0, InputType::VertexData, 0 },
89 };
90
91 Pos3fNorm8Tex2f = Cogs::VertexFormats::createVertexFormat(elements, std::size(elements));
92 }
93
94 {
95 VertexElement elements[] = {
96 { 0, DataFormat::X16Y16Z16W16_FLOAT, ElementSemantic::Position, 0, InputType::VertexData, 0 },
97 { sizeof(uint64_t), DataFormat::R10G10B10A2_UNORM, ElementSemantic::Normal, 0, InputType::VertexData, 0 },
98 { sizeof(uint64_t) + sizeof(uint32_t), DataFormat::X32Y32_FLOAT, ElementSemantic::TextureCoordinate, 0, InputType::VertexData, 0 },
99 };
100
101 Pos4hNorm10Tex2f = Cogs::VertexFormats::createVertexFormat(elements, std::size(elements));
102 }
103
104 {
105 VertexElement elements[] = {
106 { 0, DataFormat::X16Y16Z16W16_FLOAT, ElementSemantic::Position, 0, InputType::VertexData, 0 },
107 { sizeof(uint64_t), DataFormat::R8G8B8A8_SINT, ElementSemantic::Normal, 0, InputType::VertexData, 0 },
108 { sizeof(uint64_t) + sizeof(uint32_t), DataFormat::X32Y32_FLOAT, ElementSemantic::TextureCoordinate, 0, InputType::VertexData, 0 },
109 };
110
111 Pos4hNorm8Tex2f = Cogs::VertexFormats::createVertexFormat(elements, std::size(elements));
112 }
113
114 {
115 VertexElement elements[] = {
116 { 0, DataFormat::X32Y32Z32_FLOAT, ElementSemantic::Position, 0, InputType::VertexData, 0 },
117 { 3 * sizeof(float), DataFormat::X32Y32Z32_FLOAT, ElementSemantic::Normal, 0, InputType::VertexData, 0 },
118 { 6 * sizeof(float), DataFormat::X32Y32Z32W32_FLOAT, ElementSemantic::TextureCoordinate, 0, InputType::VertexData, 0 },
119 };
120
121 Pos3fNorm3fTex4f = Cogs::VertexFormats::createVertexFormat(elements, std::size(elements));
122 }
123
124 {
125 VertexElement elements[] = {
126 { 0, DataFormat::X32Y32Z32_FLOAT, ElementSemantic::Position, 0, InputType::VertexData, 0 },
127 { 3 * sizeof(float), DataFormat::X32Y32Z32W32_FLOAT, ElementSemantic::Normal, 0, InputType::VertexData, 0 },
128 { 7 * sizeof(float), DataFormat::X32Y32Z32W32_FLOAT, ElementSemantic::TextureCoordinate, 0, InputType::VertexData, 0 },
129 };
130
131 Pos3fNorm4fTex4f = Cogs::VertexFormats::createVertexFormat(elements, std::size(elements));
132 }
133
134 {
135 VertexElement elements[] = {
136 { 0, DataFormat::X32Y32Z32W32_FLOAT, ElementSemantic::Position, 0, InputType::VertexData, 0 },
137 { 4 * sizeof(float), DataFormat::X32Y32Z32W32_FLOAT, ElementSemantic::Normal, 0, InputType::VertexData, 0 },
138 { 8 * sizeof(float), DataFormat::X32Y32Z32W32_FLOAT, ElementSemantic::TextureCoordinate, 0, InputType::VertexData, 0 },
139 };
140
141 Pos4fNorm4fTex4f = Cogs::VertexFormats::createVertexFormat(elements, std::size(elements));
142 }
143
144 {
145 VertexElement elements[] = {
146 { 0, DataFormat::X32Y32Z32_FLOAT, ElementSemantic::Position, 0, InputType::VertexData, 0 },
147 { 3 * sizeof(float), DataFormat::X32Y32Z32_FLOAT, ElementSemantic::Normal, 0, InputType::VertexData, 0 },
148 { 6 * sizeof(float), DataFormat::X32Y32Z32W32_FLOAT, ElementSemantic::Color, 0, InputType::VertexData, 0 },
149 { 10 * sizeof(float), DataFormat::X32Y32_FLOAT, ElementSemantic::TextureCoordinate, 0, InputType::VertexData, 0 },
150 };
151
152 Pos3fNorm3fColor4fTex2f = Cogs::VertexFormats::createVertexFormat(elements, std::size(elements));
153 }
154
155 {
156 VertexElement elements[] = {
157 { 0, DataFormat::X32Y32Z32_FLOAT, ElementSemantic::Position, 0, InputType::VertexData, 0 },
158 { 3 * sizeof(float), DataFormat::X32Y32Z32_FLOAT, ElementSemantic::Normal, 0, InputType::VertexData, 0 },
159 { 6 * sizeof(float), DataFormat::X32Y32Z32W32_FLOAT, ElementSemantic::Color, 0, InputType::VertexData, 0 },
160 };
161
162 Pos3fNorm3fColor4f = Cogs::VertexFormats::createVertexFormat(elements, std::size(elements));
163 }
164
165 {
166 VertexElement elements[] = {
167 { 0, DataFormat::X32Y32Z32_FLOAT, ElementSemantic::Position, 0, InputType::VertexData, 0 },
168 { 3 * sizeof(float), DataFormat::X32Y32_FLOAT, ElementSemantic::TextureCoordinate, 0, InputType::VertexData, 0 },
169 };
170
171 Pos3fTex2f = Cogs::VertexFormats::createVertexFormat(elements, std::size(elements));
172 }
173
174 {
175 VertexElement element = { 0, DataFormat::R32G32B32A32_SINT, ElementSemantic::Color, 4, InputType::VertexData, 0 };
176
177 BoneIndex4i = Cogs::VertexFormats::createVertexFormat(element);
178 }
179
180 {
181 VertexElement element = { 0, DataFormat::X32Y32Z32W32_FLOAT, ElementSemantic::Color, 5, InputType::VertexData, 0 };
182
183 BoneWeight4f = Cogs::VertexFormats::createVertexFormat(element);
184 }
185
186 {
187 VertexElement element = { 0, DataFormat::X32Y32Z32_FLOAT, ElementSemantic::InstanceVector, 0, InputType::InstanceData, 1 };
188
189 InstancePos3f = Cogs::VertexFormats::createVertexFormat(element);
190 }
191
192 {
193 VertexElement element = { 0, DataFormat::R32G32B32A32_FLOAT, ElementSemantic::InstanceVector, 1, InputType::InstanceData, 1 };
194
195 InstanceColor4f = Cogs::VertexFormats::createVertexFormat(element);
196 }
197
198 initialized = true;
199}
200
201Cogs::VertexFormatHandle Cogs::Core::VertexFormats::Pos2f;
202Cogs::VertexFormatHandle Cogs::Core::VertexFormats::Pos3f;
203Cogs::VertexFormatHandle Cogs::Core::VertexFormats::Pos4f;
204Cogs::VertexFormatHandle Cogs::Core::VertexFormats::Norm3f;
205Cogs::VertexFormatHandle Cogs::Core::VertexFormats::Norm4s8;
206Cogs::VertexFormatHandle Cogs::Core::VertexFormats::Norm10;
207Cogs::VertexFormatHandle Cogs::Core::VertexFormats::Tang3f;
208Cogs::VertexFormatHandle Cogs::Core::VertexFormats::Tang4f;
209Cogs::VertexFormatHandle Cogs::Core::VertexFormats::Bitang3f;
210Cogs::VertexFormatHandle Cogs::Core::VertexFormats::Tex2f;
211Cogs::VertexFormatHandle Cogs::Core::VertexFormats::Tex2f1;
212Cogs::VertexFormatHandle Cogs::Core::VertexFormats::Color4f;
213
214Cogs::VertexFormatHandle Cogs::Core::VertexFormats::Pos4fColor4f;
215
216Cogs::VertexFormatHandle Cogs::Core::VertexFormats::Pos3fNorm3f;
217Cogs::VertexFormatHandle Cogs::Core::VertexFormats::Pos3fNorm3fTex2f;
218Cogs::VertexFormatHandle Cogs::Core::VertexFormats::Pos3fNorm8Tex2f;
219Cogs::VertexFormatHandle Cogs::Core::VertexFormats::Pos4hNorm10Tex2f;
220Cogs::VertexFormatHandle Cogs::Core::VertexFormats::Pos4hNorm8Tex2f;
221Cogs::VertexFormatHandle Cogs::Core::VertexFormats::Pos3fNorm3fTex4f;
222Cogs::VertexFormatHandle Cogs::Core::VertexFormats::Pos3fNorm4fTex4f;
223Cogs::VertexFormatHandle Cogs::Core::VertexFormats::Pos3fNorm3fColor4fTex2f;
224Cogs::VertexFormatHandle Cogs::Core::VertexFormats::Pos3fNorm3fColor4f;
225Cogs::VertexFormatHandle Cogs::Core::VertexFormats::Pos4fNorm4fTex4f;
226
227Cogs::VertexFormatHandle Cogs::Core::VertexFormats::Pos3fNorm3fTan3fTex2f;
228
229Cogs::VertexFormatHandle Cogs::Core::VertexFormats::Pos3fTex2f;
230
231Cogs::VertexFormatHandle Cogs::Core::VertexFormats::BoneIndex4i;
232Cogs::VertexFormatHandle Cogs::Core::VertexFormats::BoneWeight4f;
233
234Cogs::VertexFormatHandle Cogs::Core::VertexFormats::InstancePos3f;
235Cogs::VertexFormatHandle Cogs::Core::VertexFormats::InstanceColor4f;
@ InstanceData
Per instance data.
@ VertexData
Per vertex data.
@ Position
Position semantic.
@ Tangent
Tangent semantic.
@ Normal
Normal semantic.
@ InstanceVector
Instance vector semantic.
@ Color
Color semantic.
@ TextureCoordinate
Texture coordinate semantic.