Browse Source

fix for wrong-color objects in directx

David Rose 17 years ago
parent
commit
e5cf8b1517
2 changed files with 12 additions and 14 deletions
  1. 1 1
      panda/src/pgraph/colorAttrib.cxx
  2. 11 13
      panda/src/pgui/pgFrameStyle.cxx

+ 1 - 1
panda/src/pgraph/colorAttrib.cxx

@@ -80,7 +80,7 @@ make_off() {
 ////////////////////////////////////////////////////////////////////
 CPT(RenderAttrib) ColorAttrib::
 make_default() {
-  return return_new(new ColorAttrib);
+  return make_flat(Colorf(1.0f, 1.0f, 1.0f, 1.0f));
 }
 
 ////////////////////////////////////////////////////////////////////

+ 11 - 13
panda/src/pgui/pgFrameStyle.cxx

@@ -21,6 +21,7 @@
 #include "textureAttrib.h"
 #include "renderState.h"
 #include "shadeModelAttrib.h"
+#include "colorAttrib.h"
 #include "geom.h"
 #include "geomTristrips.h"
 #include "geomVertexWriter.h"
@@ -221,25 +222,19 @@ generate_flat_geom(const LVecBase4f &frame) {
 
   CPT(GeomVertexFormat) format;
   if (has_texture()) {
-    format = GeomVertexFormat::get_v3cpt2();
+    format = GeomVertexFormat::get_v3t2();
   } else {
-    format = GeomVertexFormat::get_v3cp();
+    format = GeomVertexFormat::get_v3();
   }
   
   PT(GeomVertexData) vdata = new GeomVertexData
     ("PGFrame", format, Geom::UH_static);
   
   GeomVertexWriter vertex(vdata, InternalName::get_vertex());
-  GeomVertexWriter color(vdata, InternalName::get_color());
   vertex.add_data3f(left, 0.0f, top);
   vertex.add_data3f(left, 0.0f, bottom);
   vertex.add_data3f(right, 0.0f, top);
   vertex.add_data3f(right, 0.0f, bottom);
-  
-  color.add_data4f(_color);
-  color.add_data4f(_color);
-  color.add_data4f(_color);
-  color.add_data4f(_color);
 
   if (has_texture()) {
     // Generate UV's.
@@ -259,9 +254,10 @@ generate_flat_geom(const LVecBase4f &frame) {
   strip->add_next_vertices(4);
   strip->close_primitive();
   
+  CPT(RenderState) state = RenderState::make(ColorAttrib::make_flat(_color));
   PT(Geom) geom = new Geom(vdata);
   geom->add_primitive(strip);
-  gnode->add_geom(geom);
+  gnode->add_geom(geom, state);
   
   if (has_texture()) {
     CPT(RenderState) state = 
@@ -432,8 +428,9 @@ generate_bevel_geom(const LVecBase4f &frame, bool in) {
   PT(Geom) geom = new Geom(vdata);
   geom->add_primitive(strip);
   
-  CPT(RenderState) flat_state = RenderState::make(ShadeModelAttrib::make(ShadeModelAttrib::M_flat));
-  gnode->add_geom(geom, flat_state);
+  CPT(RenderState) state = RenderState::make(ShadeModelAttrib::make(ShadeModelAttrib::M_flat),
+                                             ColorAttrib::make_vertex());
+  gnode->add_geom(geom, state);
   
   // For now, beveled and grooved geoms don't support textures.  Easy
   // to add if anyone really wants this.
@@ -673,8 +670,9 @@ generate_groove_geom(const LVecBase4f &frame, bool in) {
   PT(Geom) geom = new Geom(vdata);
   geom->add_primitive(strip);
   
-  CPT(RenderState) flat_state = RenderState::make(ShadeModelAttrib::make(ShadeModelAttrib::M_flat));
-  gnode->add_geom(geom, flat_state);
+  CPT(RenderState) state = RenderState::make(ShadeModelAttrib::make(ShadeModelAttrib::M_flat),
+                                             ColorAttrib::make_vertex());
+  gnode->add_geom(geom, state);
   
   // For now, beveled and grooved geoms don't support textures.  Easy
   // to add if anyone really wants this.