From 6ae6a86eba889fd33106b0068f3844bd46fde3ad Mon Sep 17 00:00:00 2001 From: aignacio_sf <> Date: Sat, 19 Jul 2008 02:50:36 +0000 Subject: [PATCH] Add support for multiple texture coordinates, vertex coordinates, ... Add support for all column names i.e. texcoord.xxxx --- panda/src/dxgsg9/dxShaderContext9.cxx | 12 ++++++------ panda/src/dxgsg9/vertexElementArray.cxx | 10 +++++++--- panda/src/dxgsg9/vertexElementArray.h | 1 + 3 files changed, 14 insertions(+), 9 deletions(-) diff --git a/panda/src/dxgsg9/dxShaderContext9.cxx b/panda/src/dxgsg9/dxShaderContext9.cxx index fd0cf7db7e..ee7160ff1f 100644 --- a/panda/src/dxgsg9/dxShaderContext9.cxx +++ b/panda/src/dxgsg9/dxShaderContext9.cxx @@ -496,7 +496,7 @@ update_shader_vertex_arrays(CLP(ShaderContext) *prev, GSG *gsg) if (false) { - } else if (name == InternalName::get_vertex ( )) { + } else if (name -> get_top ( ) == InternalName::get_vertex ( )) { if (numeric_type == Geom::NT_float32) { switch (num_values) { @@ -514,7 +514,7 @@ update_shader_vertex_arrays(CLP(ShaderContext) *prev, GSG *gsg) dxgsg9_cat.error ( ) << "VE ERROR: invalid vertex type " << numeric_type << "\n"; } - } else if (name == InternalName::get_texcoord ( )) { + } else if (name -> get_top ( ) == InternalName::get_texcoord ( )) { if (numeric_type == Geom::NT_float32) { switch (num_values) @@ -536,7 +536,7 @@ update_shader_vertex_arrays(CLP(ShaderContext) *prev, GSG *gsg) dxgsg9_cat.error ( ) << "VE ERROR: invalid texture coordinate type " << numeric_type << "\n"; } - } else if (name == InternalName::get_normal ( )) { + } else if (name -> get_top ( ) == InternalName::get_normal ( )) { if (numeric_type == Geom::NT_float32) { switch (num_values) @@ -552,7 +552,7 @@ update_shader_vertex_arrays(CLP(ShaderContext) *prev, GSG *gsg) dxgsg9_cat.error ( ) << "VE ERROR: invalid normal type " << numeric_type << "\n"; } - } else if (name == InternalName::get_binormal ( )) { + } else if (name -> get_top ( ) == InternalName::get_binormal ( )) { if (numeric_type == Geom::NT_float32) { switch (num_values) @@ -568,7 +568,7 @@ update_shader_vertex_arrays(CLP(ShaderContext) *prev, GSG *gsg) dxgsg9_cat.error ( ) << "VE ERROR: invalid binormal type " << numeric_type << "\n"; } - } else if (name == InternalName::get_tangent ( )) { + } else if (name -> get_top ( ) == InternalName::get_tangent ( )) { if (numeric_type == Geom::NT_float32) { switch (num_values) @@ -584,7 +584,7 @@ update_shader_vertex_arrays(CLP(ShaderContext) *prev, GSG *gsg) dxgsg9_cat.error ( ) << "VE ERROR: invalid tangent type " << numeric_type << "\n"; } - } else if (name == InternalName::get_color ( )) { + } else if (name -> get_top ( ) == InternalName::get_color ( )) { if (numeric_type == Geom::NT_packed_dcba || numeric_type == Geom::NT_packed_dabc || diff --git a/panda/src/dxgsg9/vertexElementArray.cxx b/panda/src/dxgsg9/vertexElementArray.cxx index e657cc26a9..f25f2f0a18 100644 --- a/panda/src/dxgsg9/vertexElementArray.cxx +++ b/panda/src/dxgsg9/vertexElementArray.cxx @@ -20,6 +20,7 @@ VertexElementArray::VertexElementArray (int maximum_vertex_elements) { this -> offset = 0; this -> total_elements = 0; this -> maximum_vertex_elements = maximum_vertex_elements; + this -> total_texture_coordinate_elements = 0; this -> vertex_element_array = new DIRECT_3D_VERTEX_ELEMENT [maximum_vertex_elements]; memset (this -> vertex_element_array, 0, sizeof (DIRECT_3D_VERTEX_ELEMENT) * maximum_vertex_elements); this -> vertex_element_type_array = new VERTEX_ELEMENT_TYPE [maximum_vertex_elements]; @@ -229,7 +230,8 @@ void VertexElementArray::add_u_vertex_element (int stream_index) { vertex_element -> Method = D3DDECLMETHOD_DEFAULT; vertex_element -> Usage = D3DDECLUSAGE_TEXCOORD; - vertex_element -> UsageIndex = 0; + vertex_element -> UsageIndex = this -> total_texture_coordinate_elements; + this -> total_texture_coordinate_elements++; this -> offset += 4; this -> total_elements++; @@ -252,7 +254,8 @@ void VertexElementArray::add_uv_vertex_element (int stream_index) { vertex_element -> Method = D3DDECLMETHOD_DEFAULT; vertex_element -> Usage = D3DDECLUSAGE_TEXCOORD; - vertex_element -> UsageIndex = 0; + vertex_element -> UsageIndex = this -> total_texture_coordinate_elements; + this -> total_texture_coordinate_elements++; this -> offset += 8; this -> total_elements++; @@ -275,7 +278,8 @@ void VertexElementArray::add_uvw_vertex_element (int stream_index) { vertex_element -> Method = D3DDECLMETHOD_DEFAULT; vertex_element -> Usage = D3DDECLUSAGE_TEXCOORD; - vertex_element -> UsageIndex = 0; + vertex_element -> UsageIndex = this -> total_texture_coordinate_elements; + this -> total_texture_coordinate_elements++; this -> offset += 12; this -> total_elements++; diff --git a/panda/src/dxgsg9/vertexElementArray.h b/panda/src/dxgsg9/vertexElementArray.h index 5b53090cff..4e7865dcfd 100644 --- a/panda/src/dxgsg9/vertexElementArray.h +++ b/panda/src/dxgsg9/vertexElementArray.h @@ -85,6 +85,7 @@ public: int offset; int total_elements; int maximum_vertex_elements; + int total_texture_coordinate_elements; int vertex_element_type_counter_array [VS_TOTAL_TYPES]; DIRECT_3D_VERTEX_ELEMENT *vertex_element_array; VERTEX_ELEMENT_TYPE *vertex_element_type_array;