00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015 #include "dxGraphicsStateGuardian9.h"
00016 #include "vertexElementArray.h"
00017
00018
00019 VertexElementArray::VertexElementArray(int maximum_vertex_elements) {
00020 _total_elements = 0;
00021 _maximum_vertex_elements = maximum_vertex_elements;
00022
00023 _vertex_element_array = new D3DVERTEXELEMENT9[maximum_vertex_elements];
00024 memset(_vertex_element_array, 0, sizeof(D3DVERTEXELEMENT9) * maximum_vertex_elements);
00025 }
00026
00027 VertexElementArray::~VertexElementArray() {
00028 delete _vertex_element_array;
00029 }
00030
00031 void VertexElementArray::add_position_xyz_vertex_element(int stream_index, int offset) {
00032 if (_total_elements >= _maximum_vertex_elements) {
00033 return;
00034 }
00035
00036 LPD3DVERTEXELEMENT9 vertex_element = &_vertex_element_array[_total_elements];
00037
00038 vertex_element->Stream = stream_index;
00039 vertex_element->Offset = offset;
00040 vertex_element->Type = D3DDECLTYPE_FLOAT3;
00041 vertex_element->Method = D3DDECLMETHOD_DEFAULT;
00042
00043 vertex_element->Usage = D3DDECLUSAGE_POSITION;
00044 vertex_element->UsageIndex = 0;
00045
00046 _total_elements++;
00047 }
00048
00049 void VertexElementArray::add_position_xyzw_vertex_element(int stream_index, int offset) {
00050 if (_total_elements >= _maximum_vertex_elements) {
00051 return;
00052 }
00053
00054 LPD3DVERTEXELEMENT9 vertex_element = &_vertex_element_array[_total_elements];
00055
00056 vertex_element->Stream = stream_index;
00057 vertex_element->Offset = offset;
00058 vertex_element->Type = D3DDECLTYPE_FLOAT4;
00059 vertex_element->Method = D3DDECLMETHOD_DEFAULT;
00060
00061 vertex_element->Usage = D3DDECLUSAGE_POSITION;
00062 vertex_element->UsageIndex = 0;
00063
00064 _total_elements++;
00065 }
00066
00067 void VertexElementArray::add_normal_vertex_element(int stream_index, int offset) {
00068 if (_total_elements >= _maximum_vertex_elements) {
00069 return;
00070 }
00071
00072 LPD3DVERTEXELEMENT9 vertex_element = &_vertex_element_array[_total_elements];
00073
00074 vertex_element->Stream = stream_index;
00075 vertex_element->Offset = offset;
00076 vertex_element->Type = D3DDECLTYPE_FLOAT3;
00077 vertex_element->Method = D3DDECLMETHOD_DEFAULT;
00078
00079 vertex_element->Usage = D3DDECLUSAGE_NORMAL;
00080 vertex_element->UsageIndex = 0;
00081
00082 _total_elements++;
00083 }
00084
00085 void VertexElementArray::add_binormal_vertex_element(int stream_index, int offset) {
00086 if (_total_elements >= _maximum_vertex_elements) {
00087 return;
00088 }
00089
00090 LPD3DVERTEXELEMENT9 vertex_element = &_vertex_element_array[_total_elements];
00091
00092 vertex_element->Stream = stream_index;
00093 vertex_element->Offset = offset;
00094 vertex_element->Type = D3DDECLTYPE_FLOAT3;
00095 vertex_element->Method = D3DDECLMETHOD_DEFAULT;
00096
00097 vertex_element->Usage = D3DDECLUSAGE_BINORMAL;
00098 vertex_element->UsageIndex = 0;
00099
00100 _total_elements++;
00101 }
00102
00103 void VertexElementArray::add_tangent_vertex_element(int stream_index, int offset) {
00104 if (_total_elements >= _maximum_vertex_elements) {
00105 return;
00106 }
00107
00108 LPD3DVERTEXELEMENT9 vertex_element = &_vertex_element_array[_total_elements];
00109
00110 vertex_element->Stream = stream_index;
00111 vertex_element->Offset = offset;
00112 vertex_element->Type = D3DDECLTYPE_FLOAT3;
00113 vertex_element->Method = D3DDECLMETHOD_DEFAULT;
00114
00115 vertex_element->Usage = D3DDECLUSAGE_TANGENT;
00116 vertex_element->UsageIndex = 0;
00117
00118 _total_elements++;
00119 }
00120
00121 void VertexElementArray::add_diffuse_color_vertex_element(int stream_index, int offset) {
00122 if (_total_elements >= _maximum_vertex_elements) {
00123 return;
00124 }
00125
00126 LPD3DVERTEXELEMENT9 vertex_element = &_vertex_element_array[_total_elements];
00127
00128 vertex_element->Stream = stream_index;
00129 vertex_element->Offset = offset;
00130 vertex_element->Type = D3DDECLTYPE_D3DCOLOR;
00131 vertex_element->Method = D3DDECLMETHOD_DEFAULT;
00132
00133 vertex_element->Usage = D3DDECLUSAGE_COLOR;
00134 vertex_element->UsageIndex = 0;
00135
00136 _total_elements++;
00137 }
00138
00139 void VertexElementArray::add_specular_color_vertex_element(int stream_index, int offset) {
00140 if (_total_elements >= _maximum_vertex_elements) {
00141 return;
00142 }
00143
00144 LPD3DVERTEXELEMENT9 vertex_element = &_vertex_element_array[_total_elements];
00145
00146 vertex_element->Stream = stream_index;
00147 vertex_element->Offset = offset;
00148 vertex_element->Type = D3DDECLTYPE_D3DCOLOR;
00149 vertex_element->Method = D3DDECLMETHOD_DEFAULT;
00150
00151 vertex_element->Usage = D3DDECLUSAGE_COLOR;
00152 vertex_element->UsageIndex = 1;
00153
00154 _total_elements++;
00155 }
00156
00157 void VertexElementArray::add_u_vertex_element(int stream_index, int offset, int texture_stage) {
00158 if (_total_elements >= _maximum_vertex_elements) {
00159 return;
00160 }
00161
00162 LPD3DVERTEXELEMENT9 vertex_element = &_vertex_element_array[_total_elements];
00163
00164 vertex_element->Stream = stream_index;
00165 vertex_element->Offset = offset;
00166 vertex_element->Type = D3DDECLTYPE_FLOAT1;
00167 vertex_element->Method = D3DDECLMETHOD_DEFAULT;
00168
00169 vertex_element->Usage = D3DDECLUSAGE_TEXCOORD;
00170 vertex_element->UsageIndex = texture_stage;
00171
00172 _total_elements++;
00173 }
00174
00175 void VertexElementArray::add_uv_vertex_element(int stream_index, int offset, int texture_stage) {
00176 if (_total_elements >= _maximum_vertex_elements) {
00177 return;
00178 }
00179
00180 LPD3DVERTEXELEMENT9 vertex_element = &_vertex_element_array[_total_elements];
00181
00182 vertex_element->Stream = stream_index;
00183 vertex_element->Offset = offset;
00184 vertex_element->Type = D3DDECLTYPE_FLOAT2;
00185 vertex_element->Method = D3DDECLMETHOD_DEFAULT;
00186
00187 vertex_element->Usage = D3DDECLUSAGE_TEXCOORD;
00188 vertex_element->UsageIndex = texture_stage;
00189
00190 _total_elements++;
00191 }
00192
00193 void VertexElementArray::add_uvw_vertex_element(int stream_index, int offset, int texture_stage) {
00194 if (_total_elements >= _maximum_vertex_elements) {
00195 return;
00196 }
00197
00198 LPD3DVERTEXELEMENT9 vertex_element = &_vertex_element_array[_total_elements];
00199
00200 vertex_element->Stream = stream_index;
00201 vertex_element->Offset = offset;
00202 vertex_element->Type = D3DDECLTYPE_FLOAT3;
00203 vertex_element->Method = D3DDECLMETHOD_DEFAULT;
00204
00205 vertex_element->Usage = D3DDECLUSAGE_TEXCOORD;
00206 vertex_element->UsageIndex = texture_stage;
00207
00208 _total_elements++;
00209 }
00210
00211 void VertexElementArray::add_xyzw_vertex_element(int stream_index, int offset, int texture_stage) {
00212 if (_total_elements >= _maximum_vertex_elements) {
00213 return;
00214 }
00215
00216 LPD3DVERTEXELEMENT9 vertex_element = &_vertex_element_array[_total_elements];
00217
00218 vertex_element->Stream = stream_index;
00219 vertex_element->Offset = offset;
00220 vertex_element->Type = D3DDECLTYPE_FLOAT4;
00221 vertex_element->Method = D3DDECLMETHOD_DEFAULT;
00222
00223 vertex_element->Usage = D3DDECLUSAGE_TEXCOORD;
00224 vertex_element->UsageIndex = texture_stage;
00225
00226 _total_elements++;
00227 }
00228
00229 bool VertexElementArray::add_end_vertex_element(void) {
00230 if (_total_elements >= _maximum_vertex_elements) {
00231 return false;
00232 }
00233
00234 LPD3DVERTEXELEMENT9 vertex_element = &_vertex_element_array[_total_elements];
00235
00236 vertex_element->Stream = 0xFF;
00237 vertex_element->Offset = 0;
00238 vertex_element->Type = D3DDECLTYPE_UNUSED;
00239 vertex_element->Method = 0;
00240
00241 vertex_element->Usage = 0;
00242 vertex_element->UsageIndex = 0;
00243
00244 return true;
00245 }
00246