15 #include "dxGraphicsStateGuardian9.h" 16 #include "vertexElementArray.h" 19 VertexElementArray::VertexElementArray(
int maximum_vertex_elements) {
21 _maximum_vertex_elements = maximum_vertex_elements;
23 _vertex_element_array =
new D3DVERTEXELEMENT9[maximum_vertex_elements];
24 memset(_vertex_element_array, 0,
sizeof(D3DVERTEXELEMENT9) * maximum_vertex_elements);
27 VertexElementArray::~VertexElementArray() {
28 delete _vertex_element_array;
31 void VertexElementArray::add_position_xyz_vertex_element(
int stream_index,
int offset) {
32 if (_total_elements >= _maximum_vertex_elements) {
36 LPD3DVERTEXELEMENT9 vertex_element = &_vertex_element_array[_total_elements];
38 vertex_element->Stream = stream_index;
39 vertex_element->Offset = offset;
40 vertex_element->Type = D3DDECLTYPE_FLOAT3;
41 vertex_element->Method = D3DDECLMETHOD_DEFAULT;
43 vertex_element->Usage = D3DDECLUSAGE_POSITION;
44 vertex_element->UsageIndex = 0;
49 void VertexElementArray::add_position_xyzw_vertex_element(
int stream_index,
int offset) {
50 if (_total_elements >= _maximum_vertex_elements) {
54 LPD3DVERTEXELEMENT9 vertex_element = &_vertex_element_array[_total_elements];
56 vertex_element->Stream = stream_index;
57 vertex_element->Offset = offset;
58 vertex_element->Type = D3DDECLTYPE_FLOAT4;
59 vertex_element->Method = D3DDECLMETHOD_DEFAULT;
61 vertex_element->Usage = D3DDECLUSAGE_POSITION;
62 vertex_element->UsageIndex = 0;
67 void VertexElementArray::add_normal_vertex_element(
int stream_index,
int offset) {
68 if (_total_elements >= _maximum_vertex_elements) {
72 LPD3DVERTEXELEMENT9 vertex_element = &_vertex_element_array[_total_elements];
74 vertex_element->Stream = stream_index;
75 vertex_element->Offset = offset;
76 vertex_element->Type = D3DDECLTYPE_FLOAT3;
77 vertex_element->Method = D3DDECLMETHOD_DEFAULT;
79 vertex_element->Usage = D3DDECLUSAGE_NORMAL;
80 vertex_element->UsageIndex = 0;
85 void VertexElementArray::add_binormal_vertex_element(
int stream_index,
int offset) {
86 if (_total_elements >= _maximum_vertex_elements) {
90 LPD3DVERTEXELEMENT9 vertex_element = &_vertex_element_array[_total_elements];
92 vertex_element->Stream = stream_index;
93 vertex_element->Offset = offset;
94 vertex_element->Type = D3DDECLTYPE_FLOAT3;
95 vertex_element->Method = D3DDECLMETHOD_DEFAULT;
97 vertex_element->Usage = D3DDECLUSAGE_BINORMAL;
98 vertex_element->UsageIndex = 0;
103 void VertexElementArray::add_tangent_vertex_element(
int stream_index,
int offset) {
104 if (_total_elements >= _maximum_vertex_elements) {
108 LPD3DVERTEXELEMENT9 vertex_element = &_vertex_element_array[_total_elements];
110 vertex_element->Stream = stream_index;
111 vertex_element->Offset = offset;
112 vertex_element->Type = D3DDECLTYPE_FLOAT3;
113 vertex_element->Method = D3DDECLMETHOD_DEFAULT;
115 vertex_element->Usage = D3DDECLUSAGE_TANGENT;
116 vertex_element->UsageIndex = 0;
121 void VertexElementArray::add_diffuse_color_vertex_element(
int stream_index,
int offset) {
122 if (_total_elements >= _maximum_vertex_elements) {
126 LPD3DVERTEXELEMENT9 vertex_element = &_vertex_element_array[_total_elements];
128 vertex_element->Stream = stream_index;
129 vertex_element->Offset = offset;
130 vertex_element->Type = D3DDECLTYPE_D3DCOLOR;
131 vertex_element->Method = D3DDECLMETHOD_DEFAULT;
133 vertex_element->Usage = D3DDECLUSAGE_COLOR;
134 vertex_element->UsageIndex = 0;
139 void VertexElementArray::add_specular_color_vertex_element(
int stream_index,
int offset) {
140 if (_total_elements >= _maximum_vertex_elements) {
144 LPD3DVERTEXELEMENT9 vertex_element = &_vertex_element_array[_total_elements];
146 vertex_element->Stream = stream_index;
147 vertex_element->Offset = offset;
148 vertex_element->Type = D3DDECLTYPE_D3DCOLOR;
149 vertex_element->Method = D3DDECLMETHOD_DEFAULT;
151 vertex_element->Usage = D3DDECLUSAGE_COLOR;
152 vertex_element->UsageIndex = 1;
157 void VertexElementArray::add_u_vertex_element(
int stream_index,
int offset,
int texture_stage) {
158 if (_total_elements >= _maximum_vertex_elements) {
162 LPD3DVERTEXELEMENT9 vertex_element = &_vertex_element_array[_total_elements];
164 vertex_element->Stream = stream_index;
165 vertex_element->Offset = offset;
166 vertex_element->Type = D3DDECLTYPE_FLOAT1;
167 vertex_element->Method = D3DDECLMETHOD_DEFAULT;
169 vertex_element->Usage = D3DDECLUSAGE_TEXCOORD;
170 vertex_element->UsageIndex = texture_stage;
175 void VertexElementArray::add_uv_vertex_element(
int stream_index,
int offset,
int texture_stage) {
176 if (_total_elements >= _maximum_vertex_elements) {
180 LPD3DVERTEXELEMENT9 vertex_element = &_vertex_element_array[_total_elements];
182 vertex_element->Stream = stream_index;
183 vertex_element->Offset = offset;
184 vertex_element->Type = D3DDECLTYPE_FLOAT2;
185 vertex_element->Method = D3DDECLMETHOD_DEFAULT;
187 vertex_element->Usage = D3DDECLUSAGE_TEXCOORD;
188 vertex_element->UsageIndex = texture_stage;
193 void VertexElementArray::add_uvw_vertex_element(
int stream_index,
int offset,
int texture_stage) {
194 if (_total_elements >= _maximum_vertex_elements) {
198 LPD3DVERTEXELEMENT9 vertex_element = &_vertex_element_array[_total_elements];
200 vertex_element->Stream = stream_index;
201 vertex_element->Offset = offset;
202 vertex_element->Type = D3DDECLTYPE_FLOAT3;
203 vertex_element->Method = D3DDECLMETHOD_DEFAULT;
205 vertex_element->Usage = D3DDECLUSAGE_TEXCOORD;
206 vertex_element->UsageIndex = texture_stage;
211 void VertexElementArray::add_xyzw_vertex_element(
int stream_index,
int offset,
int texture_stage) {
212 if (_total_elements >= _maximum_vertex_elements) {
216 LPD3DVERTEXELEMENT9 vertex_element = &_vertex_element_array[_total_elements];
218 vertex_element->Stream = stream_index;
219 vertex_element->Offset = offset;
220 vertex_element->Type = D3DDECLTYPE_FLOAT4;
221 vertex_element->Method = D3DDECLMETHOD_DEFAULT;
223 vertex_element->Usage = D3DDECLUSAGE_TEXCOORD;
224 vertex_element->UsageIndex = texture_stage;
229 bool VertexElementArray::add_end_vertex_element(
void) {
230 if (_total_elements >= _maximum_vertex_elements) {
234 LPD3DVERTEXELEMENT9 vertex_element = &_vertex_element_array[_total_elements];
236 vertex_element->Stream = 0xFF;
237 vertex_element->Offset = 0;
238 vertex_element->Type = D3DDECLTYPE_UNUSED;
239 vertex_element->Method = 0;
241 vertex_element->Usage = 0;
242 vertex_element->UsageIndex = 0;