Panda3D
|
00001 // Filename: vertexElementArray.cxx 00002 // Created by: aignacio (Jan06) 00003 // 00004 //////////////////////////////////////////////////////////////////// 00005 // 00006 // PANDA 3D SOFTWARE 00007 // Copyright (c) Carnegie Mellon University. All rights reserved. 00008 // 00009 // All use of this software is subject to the terms of the revised BSD 00010 // license. You should have received a copy of this license along 00011 // with this source code in a file named "LICENSE." 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