浏览代码

Add support for multiple texture coordinates, vertex coordinates, ...
Add support for all column names i.e. texcoord.xxxx

aignacio_sf 17 年之前
父节点
当前提交
6ae6a86eba

+ 6 - 6
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 ||

+ 7 - 3
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++;

+ 1 - 0
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;