Panda3D

vertexElementArray.cxx

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 
 All Classes Functions Variables Enumerations