Bläddra i källkod

Fix debug rendering: switch from modify_geom to set_geom

enn0x 14 år sedan
förälder
incheckning
3262f702a3
1 ändrade filer med 28 tillägg och 34 borttagningar
  1. 28 34
      panda/src/bullet/bulletDebugNode.cxx

+ 28 - 34
panda/src/bullet/bulletDebugNode.cxx

@@ -52,20 +52,10 @@ BulletDebugNode(const char *name) : GeomNode(name) {
     prim = new GeomLines(Geom::UH_stream);
     prim->set_shade_model(Geom::SM_uniform);
 
-/*
-    // Draw something in oder to prevent getting optimized away
-    GeomVertexWriter vwriter(vdata, InternalName::get_vertex());
-    vwriter.add_data3(0.0, 0.0, 0.0);
-    vwriter.add_data3(0.0, 0.0, 0.0);
-    vwriter.add_data3(0.0, 0.0, 0.0);
-    prim->add_next_vertices(2);
-    prim->close_primitive();
-*/
-
     geom = new Geom(vdata);
     geom->add_primitive(prim);
 
-    this->add_geom(geom);
+    add_geom(geom);
   }
 
   // Triangles
@@ -79,20 +69,10 @@ BulletDebugNode(const char *name) : GeomNode(name) {
     prim = new GeomTriangles(Geom::UH_stream);
     prim->set_shade_model(Geom::SM_uniform);
 
-/*
-    // Draw something in oder to prevent getting optimized away
-    GeomVertexWriter vwriter(vdata, InternalName::get_vertex());
-    vwriter.add_data3(0.0, 0.0, 0.0);
-    vwriter.add_data3(0.0, 0.0, 0.0);
-    vwriter.add_data3(0.0, 0.0, 0.0);
-    prim->add_next_vertices(3);
-    prim->close_primitive();
-*/
-
     geom = new Geom(vdata);
     geom->add_primitive(prim);
 
-    this->add_geom(geom);
+    add_geom(geom);
   }
 }
 
@@ -230,6 +210,8 @@ sync_b2p(btDynamicsWorld *world) {
 
   if (is_overall_hidden()) return;
 
+  nassertv(get_num_geoms() == 2);
+
   // Collect debug geometry data
   _drawer._lines.clear();
   _drawer._triangles.clear();
@@ -243,13 +225,14 @@ sync_b2p(btDynamicsWorld *world) {
 
   // Render lines
   {
-    PT(Geom) geom = modify_geom(0); // TODO idx "0" is assumed
-    PT(GeomVertexData) vdata = geom->modify_vertex_data();
-    PT(GeomPrimitive) prim = geom->modify_primitive(0);
+    PT(GeomVertexData) vdata;
+    PT(Geom) geom;
+    PT(GeomLines) prim;
 
-    geom->clear_cache();
-    vdata->clear_rows();
-    prim->clear_vertices();
+    vdata = new GeomVertexData("", GeomVertexFormat::get_v3c4(), Geom::UH_stream);
+
+    prim = new GeomLines(Geom::UH_stream);
+    prim->set_shade_model(Geom::SM_uniform);
 
     GeomVertexWriter vwriter = GeomVertexWriter(vdata, InternalName::get_vertex());
     GeomVertexWriter cwriter = GeomVertexWriter(vdata, InternalName::get_color());
@@ -269,17 +252,23 @@ sync_b2p(btDynamicsWorld *world) {
       prim->add_vertex(v++);
       prim->close_primitive();
     }
+
+    geom = new Geom(vdata);
+    geom->add_primitive(prim);
+
+    set_geom(0, geom);
   }
 
   // Render triangles
   {
-    PT(Geom) geom = modify_geom(1); // TODO idx "1" is assumed
-    PT(GeomVertexData) vdata = geom->modify_vertex_data();
-    PT(GeomPrimitive) prim = geom->modify_primitive(0);
+    PT(GeomVertexData) vdata;
+    PT(Geom) geom;
+    PT(GeomTriangles) prim;
+
+    vdata = new GeomVertexData("", GeomVertexFormat::get_v3c4(), Geom::UH_stream);
 
-    geom->clear_cache();
-    vdata->clear_rows();
-    prim->clear_vertices();
+    prim = new GeomTriangles(Geom::UH_stream);
+    prim->set_shade_model(Geom::SM_uniform);
 
     GeomVertexWriter vwriter = GeomVertexWriter(vdata, InternalName::get_vertex());
     GeomVertexWriter cwriter = GeomVertexWriter(vdata, InternalName::get_color());
@@ -302,6 +291,11 @@ sync_b2p(btDynamicsWorld *world) {
       prim->add_vertex(v++);
       prim->close_primitive();
     }
+
+    geom = new Geom(vdata);
+    geom->add_primitive(prim);
+
+    set_geom(1, geom);
   }
 }