diff --git a/panda/src/dxgsg9/dxGraphicsStateGuardian9.cxx b/panda/src/dxgsg9/dxGraphicsStateGuardian9.cxx index 16543abdd9..59ad17a019 100755 --- a/panda/src/dxgsg9/dxGraphicsStateGuardian9.cxx +++ b/panda/src/dxgsg9/dxGraphicsStateGuardian9.cxx @@ -388,7 +388,7 @@ void DXGraphicsStateGuardian9:: apply_vertex_buffer(VertexBufferContext *vbc, CLP(ShaderContext) *shader_context) { DXVertexBufferContext9 *dvbc = DCAST(DXVertexBufferContext9, vbc); - DBG_SH2 dxgsg9_cat.debug ( ) << "apply_vertex_buffer\n"; DBG_E + DBG_SH3 dxgsg9_cat.debug ( ) << "apply_vertex_buffer\n"; DBG_E bool set_stream_source; HRESULT hr; @@ -501,18 +501,18 @@ apply_vertex_buffer(VertexBufferContext *vbc, CLP(ShaderContext) *shader_context offset = 0; source_vertex_element_type = dvbc -> _vertex_element_type_array; - while (source_vertex_element_type -> id != VS_END) { - if (source_vertex_element_type -> id == - vertex_element_type -> id) { + while (source_vertex_element_type -> vs_input_type != VS_END) { + if (source_vertex_element_type -> vs_input_type == vertex_element_type -> vs_input_type && + source_vertex_element_type -> index == vertex_element_type -> index) { offset = source_vertex_element_type -> offset; break; } source_vertex_element_type++; } - if (source_vertex_element_type -> id == VS_END) { + if (source_vertex_element_type -> vs_input_type == VS_END) { dxgsg9_cat.error() << "unable to find a mapping for vertex shader input type=" - << vertex_element_type -> id + << vertex_element_type -> vs_input_type << " from vertex elements\n"; } @@ -1142,8 +1142,6 @@ begin_draw_primitives(const Geom *geom, const GeomMunger *munger, DBG_SH5 dxgsg9_cat.debug ( ) << "begin_draw_primitives\n"; DBG_E - - // SHADER if (_vertex_array_shader_context==0) { if (_current_shader_context==0) { @@ -1164,13 +1162,108 @@ begin_draw_primitives(const Geom *geom, const GeomMunger *munger, _vertex_array_shader_expansion = _current_shader_expansion; _vertex_array_shader_context = _current_shader_context; -// const GeomVertexFormat *format = _vertex_data->get_format(); - + const GeomVertexFormat *format = _vertex_data->get_format ( ); const GeomVertexArrayData *data; + int number_of_arrays = _vertex_data -> get_num_arrays ( ); - // use the original data if possible - if (_current_shader_context && _vertex_data->get_num_arrays ( ) > 1) { - data = _vertex_data->get_array(1); + if (_current_shader_context && number_of_arrays > 1) { + + // find a matching vertex format for the vertex shader's input if possible + VertexElementArray *vertex_element_array; + + vertex_element_array = _current_shader_context -> _vertex_element_array; + if (vertex_element_array) + { + bool match; + bool multiple_matches; + int index; + int first_index; + + match = false; + multiple_matches = false; + first_index = -1; + + // quick check for a match + // find the one array with the minimum number of elements if possible + { + for (index = 0; index < number_of_arrays; index++) { + data = _vertex_data -> get_array (index); + + const GeomVertexArrayFormat *array_format = data->get_array_format(); + int number_of_columns = array_format->get_num_columns(); + + DBG_VEA + dxgsg9_cat.debug ( ) + << " data index " << index + << " number_of_columns " << number_of_columns + << " vertex_element_array -> total_elements " << vertex_element_array -> total_elements + << "\n"; + DBG_E + + if (number_of_columns >= vertex_element_array -> total_elements) { + if (first_index >= 0) { + multiple_matches = true; + } + else { + first_index = index; + } + } + } + } + + if (multiple_matches) + { + // ugh slow, need to find which one + for (index = first_index; index < number_of_arrays; index++) + { + data = _vertex_data -> get_array (index); + + const GeomVertexArrayFormat *array_format = data->get_array_format(); + int number_of_columns = array_format->get_num_columns(); + + if (number_of_columns >= vertex_element_array -> total_elements) + { + +// check not implemented yet +dxgsg9_cat.error ( ) << "vertex_element_type_array check not implemented yet\n"; + +// build a vertex_element_type_array from data + +// compare both vertex_element_type_array for a match +vertex_element_array -> vertex_element_type_array; + + + } + } + +// since the check is not implemented yet use first_index for now +data = _vertex_data -> get_array (first_index); + + match = true; + } + else + { + if (first_index >= 0) { + data = _vertex_data -> get_array (first_index); + match = true; + } + } + + if (match) { + + } + else { + // ERROR + dxgsg9_cat.error ( ) << "could not find matching vertex element data for vertex shader\n"; + + // just use the 0 array + data = _vertex_data->get_array(0); + } + } + else { + // ERROR + dxgsg9_cat.error ( ) << "_current_shader_context -> _vertex_element_array == 0\n"; + } } else { // The munger should have put the FVF data in the first array. @@ -2412,20 +2505,37 @@ reset() { _supports_render_texture = false; // default render to texture format - _screen->_render_to_texture_d3d_format = D3DFMT_X8R8G8B8; + _screen->_render_to_texture_d3d_format = D3DFMT_A8R8G8B8; + + #define TOTAL_RENDER_TO_TEXTURE_FORMATS 3 + + D3DFORMAT render_to_texture_formats [TOTAL_RENDER_TO_TEXTURE_FORMATS] = + { + D3DFMT_A8R8G8B8, // check for this format first + D3DFMT_X8R8G8B8, + (D3DFORMAT) 0, // place holder for _screen->_display_mode.Format + }; + + render_to_texture_formats [TOTAL_RENDER_TO_TEXTURE_FORMATS - 1] = _screen->_display_mode.Format; + hr = _d3d_device->GetCreationParameters (&creation_parameters); if (SUCCEEDED (hr)) { - hr = _screen->_d3d9->CheckDeviceFormat ( - creation_parameters.AdapterOrdinal, - creation_parameters.DeviceType, - _screen->_display_mode.Format, - D3DUSAGE_RENDERTARGET, - D3DRTYPE_TEXTURE, - _screen->_render_to_texture_d3d_format); - if (SUCCEEDED (hr)) { - // match the display mode format for render to texture - _screen->_render_to_texture_d3d_format = _screen->_display_mode.Format; - _supports_render_texture = true; + int index; + for (index = 0; index < TOTAL_RENDER_TO_TEXTURE_FORMATS; index++) { + hr = _screen->_d3d9->CheckDeviceFormat ( + creation_parameters.AdapterOrdinal, + creation_parameters.DeviceType, + _screen->_display_mode.Format, + D3DUSAGE_RENDERTARGET, + D3DRTYPE_TEXTURE, + render_to_texture_formats [index]); + if (SUCCEEDED (hr)) { + _screen->_render_to_texture_d3d_format = render_to_texture_formats [index]; + _supports_render_texture = true; + } + if (_supports_render_texture) { + break; + } } } if (dxgsg9_cat.is_debug()) { @@ -2706,7 +2816,7 @@ do_issue_shader() { context = (CLP(ShaderContext) *)(expansion->prepare_now(get_prepared_objects(), this)); } - if (context == 0) { + if (context == 0 || (context && context -> valid (this) == false)) { if (_current_shader_context != 0) { _current_shader_context->unbind(this); _current_shader_expansion = 0; diff --git a/panda/src/dxgsg9/dxGraphicsStateGuardian9.h b/panda/src/dxgsg9/dxGraphicsStateGuardian9.h index 0a14b13adc..27a0de9cff 100755 --- a/panda/src/dxgsg9/dxGraphicsStateGuardian9.h +++ b/panda/src/dxgsg9/dxGraphicsStateGuardian9.h @@ -45,13 +45,13 @@ typedef LPDIRECT3DPIXELSHADER9 DIRECT_3D_PIXEL_SHADER; #include "dxShaderContext9.h" -#define DEBUG_ENABLE !false +#define DEBUG_ENABLE false #define DBG_SH1 if (false && DEBUG_ENABLE) { #define DBG_SH2 if (false && DEBUG_ENABLE) { #define DBG_SH3 if (false && DEBUG_ENABLE) { #define DBG_SH4 if (false && DEBUG_ENABLE) { #define DBG_SH5 if (false && DEBUG_ENABLE) { -#define DBG_HLSL if (!false && DEBUG_ENABLE) { +#define DBG_HLSL if (false && DEBUG_ENABLE) { #define DBG_VEA if (false && DEBUG_ENABLE) { #define DBG_S if (false && DEBUG_ENABLE) { #define DBG_E } diff --git a/panda/src/dxgsg9/dxShaderContext9.cxx b/panda/src/dxgsg9/dxShaderContext9.cxx index 86979004cd..4cdc7fb5a8 100644 --- a/panda/src/dxgsg9/dxShaderContext9.cxx +++ b/panda/src/dxgsg9/dxShaderContext9.cxx @@ -392,11 +392,12 @@ CLP(ShaderContext)(ShaderExpansion *s, GSG *gsg) : ShaderContext(s) { s->parse_init(); s->parse_line(header, true, true); + _state = false; + #ifdef HAVE_CGDX9 DBG_SH2 dxgsg9_cat.debug ( ) << "SHADER: Create ShaderContext \n"; DBG_E - _state = false; _cg_shader = false; _cg_profile[SHADER_type_vert] = CG_PROFILE_UNKNOWN; @@ -626,7 +627,7 @@ CLP(ShaderContext)(ShaderExpansion *s, GSG *gsg) : ShaderContext(s) { // SHADER ISSUE: STREAM INDEX ALWAYS 0 FOR VERTEX BUFFER? stream_index = 0; - vertex_element_array = new VertexElementArray (_direct_3d_vertex_shader.total_semantics + 16); + vertex_element_array = new VertexElementArray (_direct_3d_vertex_shader.total_semantics + 2); for (index = 0; index < _direct_3d_vertex_shader.total_semantics; index++) { D3DXSEMANTIC *semantic; @@ -1661,7 +1662,7 @@ update_shader_vertex_arrays(CLP(ShaderContext) *prev, GSG *gsg) // SHADER ISSUE: STREAM INDEX ALWAYS 0 FOR VERTEX BUFFER? stream_index = 0; - vertex_element_array = new VertexElementArray (nvarying + 16); + vertex_element_array = new VertexElementArray (nvarying + 2); for (int i=0; iget_num_columns(); - int total_elements; - total_elements = num_columns + 2; - _vertex_element_type_array = new VERTEX_ELEMENT_TYPE [total_elements]; - memset (_vertex_element_type_array, 0, total_elements * sizeof (VERTEX_ELEMENT_TYPE)); + _vertex_element_type_array = 0; - // create a simple vertex type mapping from the vertex elements - for (index = 0; index < num_columns; index++) + VERTEX_ELEMENT_TYPE *vertex_element_type_array; + +// if (scrn._dxgsg9 -> _current_shader_context) { - int num_values; - const InternalName *name; + int total_elements; + unsigned char vertex_element_type_counter_array [VS_TOTAL_TYPES]; + VERTEX_ELEMENT_TYPE *vertex_element_type; - name = array_format -> get_column (index) -> get_name ( ); - num_values = array_format -> get_column(index) -> get_num_values ( ); + total_elements = num_columns + 2; + vertex_element_type_array = new VERTEX_ELEMENT_TYPE [total_elements]; + memset (vertex_element_type_array, 0, total_elements * sizeof (VERTEX_ELEMENT_TYPE)); + memset (vertex_element_type_counter_array, 0, sizeof (vertex_element_type_counter_array)); - if (false) { + // create a simple vertex type mapping from the vertex elements + vertex_element_type = vertex_element_type_array; + for (index = 0; index < num_columns; index++) + { + int num_values; + const InternalName *name; - } else if (name == InternalName::get_vertex ( )) { + name = array_format -> get_column (index) -> get_name ( ); + num_values = array_format -> get_column(index) -> get_num_values ( ); - switch (num_values) - { - case 3: - _vertex_element_type_array [index].id = VS_POSITION_XYZ; - break; - case 4: - _vertex_element_type_array [index].id = VS_POSITION_XYZW; - break; - default: - dxgsg9_cat.warning ( ) << "VERTEX ERROR: invalid number of position coordinate elements " << num_values << "\n"; - break; + if (false) { + + } else if (name -> get_top ( ) == InternalName::get_vertex ( )) { + + switch (num_values) + { + case 3: + vertex_element_type -> vs_input_type = VS_POSITION_XYZ; + break; + case 4: + vertex_element_type -> vs_input_type = VS_POSITION_XYZW; + break; + default: + dxgsg9_cat.warning ( ) << "VERTEX ERROR: invalid number of position coordinate elements " << num_values << "\n"; + break; + } + + } else if (name -> get_top ( ) == InternalName::get_texcoord ( )) { + + switch (num_values) + { + case 1: + vertex_element_type -> vs_input_type = VS_TEXTURE_U; + break; + case 2: + vertex_element_type -> vs_input_type = VS_TEXTURE_UV; + break; + case 3: + vertex_element_type -> vs_input_type = VS_TEXTURE_UVW; + break; + default: + dxgsg9_cat.warning ( ) << "VERTEX ERROR: invalid number of vertex texture coordinate elements " << num_values << "\n"; + break; + } + + } else if (name -> get_top ( ) == InternalName::get_normal ( )) { + + vertex_element_type -> vs_input_type = VS_NORMAL; + + } else if (name -> get_top ( ) == InternalName::get_binormal ( )) { + + vertex_element_type -> vs_input_type = VS_BINORMAL; + + } else if (name -> get_top ( ) == InternalName::get_tangent ( )) { + + vertex_element_type -> vs_input_type = VS_TANGENT; + + } else if (name -> get_top ( ) == InternalName::get_color ( )) { + + vertex_element_type -> vs_input_type = VS_DIFFUSE; + + } else { + + dxgsg9_cat.error ( ) + << "VERTEX ERROR: unsupported vertex element " << name -> get_name ( ) + << "\n"; + + vertex_element_type -> vs_input_type = VS_ERROR; } - } else if (name == InternalName::get_texcoord ( )) { + vertex_element_type -> index = vertex_element_type_counter_array [vertex_element_type -> vs_input_type]; + vertex_element_type_counter_array [vertex_element_type -> vs_input_type]++; - switch (num_values) - { - case 1: - _vertex_element_type_array [index].id = VS_TEXTURE_U; - break; - case 2: - _vertex_element_type_array [index].id = VS_TEXTURE_UV; - break; - case 3: - _vertex_element_type_array [index].id = VS_TEXTURE_UVW; - break; - default: - dxgsg9_cat.warning ( ) << "VERTEX ERROR: invalid number of vertex texture coordinate elements " << num_values << "\n"; - break; - } + // SHADER ISSUE: STREAM INDEX ALWAYS 0 FOR VERTEX BUFFER ??? + vertex_element_type -> stream = 0; + vertex_element_type -> offset = array_format -> get_column(index) -> get_start ( ); - } else if (name == InternalName::get_normal ( )) { + DBG_VEA dxgsg9_cat.debug() + << "INFO VertexElementArray " << index + << " " << name -> get_name ( ) + << " VS INPUT TYPE " << vertex_element_type -> vs_input_type + << " index " << vertex_element_type -> index + << " offset " << vertex_element_type -> offset + << "\n"; + DBG_E - _vertex_element_type_array [index].id = VS_NORMAL; - - } else if (name == InternalName::get_binormal ( )) { - - _vertex_element_type_array [index].id = VS_BINORMAL; - - } else if (name == InternalName::get_tangent ( )) { - - _vertex_element_type_array [index].id = VS_TANGENT; - - } else if (name == InternalName::get_color ( )) { - - _vertex_element_type_array [index].id = VS_DIFFUSE; - - } else { - - dxgsg9_cat.warning ( ) << "VERTEX ERROR: unsupported vertex element " << name -> get_name ( ) << "\n"; - _vertex_element_type_array [index].id = VS_ERROR; + vertex_element_type++; } -// SHADER ISSUE: STREAM INDEX ALWAYS 0 FOR VERTEX BUFFER ??? - _vertex_element_type_array [index].stream = 0; - _vertex_element_type_array [index].offset = array_format -> get_column(index) -> get_start ( ); - - DBG_VEA dxgsg9_cat.debug() << "INFO VertexElementArray " << index - << " " << name -> get_name ( ) - << " VS ID " << _vertex_element_type_array [index].id - << " offset " << _vertex_element_type_array [index].offset + DBG_VEA dxgsg9_cat.debug() + << "INFO stride " << array_format -> get_stride ( ) + << " total bytes " << array_format-> get_total_bytes ( ) << "\n"; DBG_E } - DBG_VEA dxgsg9_cat.debug() << "INFO stride " << array_format -> get_stride ( ) << " total bytes " << array_format-> get_total_bytes ( ) << "\n"; DBG_E - + _vertex_element_type_array = vertex_element_type_array; _fvf = 0; _managed = -1; diff --git a/panda/src/dxgsg9/vertexElementArray.cxx b/panda/src/dxgsg9/vertexElementArray.cxx index 567eff5813..0c93b10201 100644 --- a/panda/src/dxgsg9/vertexElementArray.cxx +++ b/panda/src/dxgsg9/vertexElementArray.cxx @@ -50,6 +50,12 @@ int VertexElementArray::set_vertex_element_offset (int vertex_element_index, int return state; } +void VertexElementArray::set_vs_input_type (int vs_input_type, VERTEX_ELEMENT_TYPE *vertex_element_type) { + vertex_element_type -> vs_input_type = vs_input_type; + vertex_element_type -> index = vertex_element_type_counter_array [vertex_element_type -> vs_input_type]; + vertex_element_type_counter_array [vertex_element_type -> vs_input_type]++; +} + void VertexElementArray::add_position_xyz_vertex_element (int stream_index) { DIRECT_3D_VERTEX_ELEMENT *vertex_element; VERTEX_ELEMENT_TYPE *vertex_element_type; @@ -58,9 +64,7 @@ void VertexElementArray::add_position_xyz_vertex_element (int stream_index) { vertex_element = &this -> vertex_element_array [this -> total_elements]; vertex_element_type = &this -> vertex_element_type_array [this -> total_elements]; - vertex_element_type -> id = VS_POSITION_XYZ; - vertex_element_type -> index = vertex_element_type_counter_array [vertex_element_type -> id]; - vertex_element_type_counter_array [vertex_element_type -> id]++; + set_vs_input_type (VS_POSITION_XYZ, vertex_element_type); vertex_element -> Stream = stream_index; vertex_element -> Offset = this -> offset; @@ -83,9 +87,7 @@ void VertexElementArray::add_position_xyzw_vertex_element (int stream_index) { vertex_element = &this -> vertex_element_array [this -> total_elements]; vertex_element_type = &this -> vertex_element_type_array [this -> total_elements]; - vertex_element_type -> id = VS_POSITION_XYZW; - vertex_element_type -> index = vertex_element_type_counter_array [vertex_element_type -> id]; - vertex_element_type_counter_array [vertex_element_type -> id]++; + set_vs_input_type (VS_POSITION_XYZW, vertex_element_type); vertex_element -> Stream = stream_index; vertex_element -> Offset = this -> offset; @@ -108,9 +110,7 @@ void VertexElementArray::add_normal_vertex_element (int stream_index) { vertex_element = &this -> vertex_element_array [this -> total_elements]; vertex_element_type = &this -> vertex_element_type_array [this -> total_elements]; - vertex_element_type -> id = VS_NORMAL; - vertex_element_type -> index = vertex_element_type_counter_array [vertex_element_type -> id]; - vertex_element_type_counter_array [vertex_element_type -> id]++; + set_vs_input_type (VS_NORMAL, vertex_element_type); vertex_element -> Stream = stream_index; vertex_element -> Offset = this -> offset; @@ -133,9 +133,7 @@ void VertexElementArray::add_binormal_vertex_element (int stream_index) { vertex_element = &this -> vertex_element_array [this -> total_elements]; vertex_element_type = &this -> vertex_element_type_array [this -> total_elements]; - vertex_element_type -> id = VS_BINORMAL; - vertex_element_type -> index = vertex_element_type_counter_array [vertex_element_type -> id]; - vertex_element_type_counter_array [vertex_element_type -> id]++; + set_vs_input_type (VS_BINORMAL, vertex_element_type); vertex_element -> Stream = stream_index; vertex_element -> Offset = this -> offset; @@ -158,9 +156,7 @@ void VertexElementArray::add_tangent_vertex_element (int stream_index) { vertex_element = &this -> vertex_element_array [this -> total_elements]; vertex_element_type = &this -> vertex_element_type_array [this -> total_elements]; - vertex_element_type -> id = VS_TANGENT; - vertex_element_type -> index = vertex_element_type_counter_array [vertex_element_type -> id]; - vertex_element_type_counter_array [vertex_element_type -> id]++; + set_vs_input_type (VS_TANGENT, vertex_element_type); vertex_element -> Stream = stream_index; vertex_element -> Offset = this -> offset; @@ -183,9 +179,7 @@ void VertexElementArray::add_diffuse_color_vertex_element (int stream_index) { vertex_element = &this -> vertex_element_array [this -> total_elements]; vertex_element_type = &this -> vertex_element_type_array [this -> total_elements]; - vertex_element_type -> id = VS_DIFFUSE; - vertex_element_type -> index = vertex_element_type_counter_array [vertex_element_type -> id]; - vertex_element_type_counter_array [vertex_element_type -> id]++; + set_vs_input_type (VS_DIFFUSE, vertex_element_type); vertex_element -> Stream = stream_index; vertex_element -> Offset = this -> offset; @@ -208,9 +202,7 @@ void VertexElementArray::add_specular_color_vertex_element (int stream_index) { vertex_element = &this -> vertex_element_array [this -> total_elements]; vertex_element_type = &this -> vertex_element_type_array [this -> total_elements]; - vertex_element_type -> id = VS_SPECULAR; - vertex_element_type -> index = vertex_element_type_counter_array [vertex_element_type -> id]; - vertex_element_type_counter_array [vertex_element_type -> id]++; + set_vs_input_type (VS_SPECULAR, vertex_element_type); vertex_element -> Stream = stream_index; vertex_element -> Offset = this -> offset; @@ -233,9 +225,7 @@ void VertexElementArray::add_u_vertex_element (int stream_index) { vertex_element = &this -> vertex_element_array [this -> total_elements]; vertex_element_type = &this -> vertex_element_type_array [this -> total_elements]; - vertex_element_type -> id = VS_TEXTURE_U; - vertex_element_type -> index = vertex_element_type_counter_array [vertex_element_type -> id]; - vertex_element_type_counter_array [vertex_element_type -> id]++; + set_vs_input_type (VS_TEXTURE_U, vertex_element_type); vertex_element -> Stream = stream_index; vertex_element -> Offset = this -> offset; @@ -258,9 +248,7 @@ void VertexElementArray::add_uv_vertex_element (int stream_index) { vertex_element = &this -> vertex_element_array [this -> total_elements]; vertex_element_type = &this -> vertex_element_type_array [this -> total_elements]; - vertex_element_type -> id = VS_TEXTURE_UV; - vertex_element_type -> index = vertex_element_type_counter_array [vertex_element_type -> id]; - vertex_element_type_counter_array [vertex_element_type -> id]++; + set_vs_input_type (VS_TEXTURE_UV, vertex_element_type); vertex_element -> Stream = stream_index; vertex_element -> Offset = this -> offset; @@ -283,9 +271,7 @@ void VertexElementArray::add_uvw_vertex_element (int stream_index) { vertex_element = &this -> vertex_element_array [this -> total_elements]; vertex_element_type = &this -> vertex_element_type_array [this -> total_elements]; - vertex_element_type -> id = VS_TEXTURE_UVW; - vertex_element_type -> index = vertex_element_type_counter_array [vertex_element_type -> id]; - vertex_element_type_counter_array [vertex_element_type -> id]++; + set_vs_input_type (VS_TEXTURE_UVW, vertex_element_type); vertex_element -> Stream = stream_index; vertex_element -> Offset = this -> offset; @@ -310,7 +296,7 @@ int VertexElementArray::add_end_vertex_element (void) { vertex_element = &this -> vertex_element_array [this -> total_elements]; vertex_element_type = &this -> vertex_element_type_array [this -> total_elements]; - vertex_element_type -> id = VS_END; + vertex_element_type -> vs_input_type = VS_END; vertex_element -> Stream = 0xFF; vertex_element -> Type = D3DDECLTYPE_UNUSED; diff --git a/panda/src/dxgsg9/vertexElementArray.h b/panda/src/dxgsg9/vertexElementArray.h index cc0a03140d..8d12b82990 100644 --- a/panda/src/dxgsg9/vertexElementArray.h +++ b/panda/src/dxgsg9/vertexElementArray.h @@ -42,7 +42,7 @@ enum typedef struct { - int id; // this is VS_XXXXX + int vs_input_type; // this is VS_XXXXX from the enum above int index; int stream; int offset; @@ -72,6 +72,7 @@ public: ~VertexElementArray ( ); int set_vertex_element_offset (int vertex_element_index, int offset); + void set_vs_input_type (int vs_input_type, VERTEX_ELEMENT_TYPE *vertex_element_type); void add_position_xyz_vertex_element (int stream_index); void add_position_xyzw_vertex_element (int stream_index);