소스 검색

fix assertion failure

David Rose 20 년 전
부모
커밋
d47a1e6b40
1개의 변경된 파일8개의 추가작업 그리고 2개의 파일을 삭제
  1. 8 2
      panda/src/pgraph/geomTransformer.cxx

+ 8 - 2
panda/src/pgraph/geomTransformer.cxx

@@ -391,14 +391,14 @@ apply_state(GeomNode *node, const RenderState *state) {
 ////////////////////////////////////////////////////////////////////
 ////////////////////////////////////////////////////////////////////
 int GeomTransformer::
 int GeomTransformer::
 collect_vertex_data(Geom *geom, int collect_bits) {
 collect_vertex_data(Geom *geom, int collect_bits) {
-  const GeomVertexData *vdata = geom->get_vertex_data();
+  CPT(GeomVertexData) vdata = geom->get_vertex_data();
 
 
   if (vdata->get_num_rows() > _max_collect_vertices) {
   if (vdata->get_num_rows() > _max_collect_vertices) {
     // Don't even bother.
     // Don't even bother.
     return 0;
     return 0;
   }
   }
 
 
-  const GeomVertexFormat *format = vdata->get_format();
+  CPT(GeomVertexFormat) format = vdata->get_format();
 
 
   NewCollectedKey key;
   NewCollectedKey key;
   if ((collect_bits & SceneGraphReducer::CVD_name) != 0) {
   if ((collect_bits & SceneGraphReducer::CVD_name) != 0) {
@@ -456,6 +456,12 @@ collect_vertex_data(Geom *geom, int collect_bits) {
     CPT(GeomVertexFormat) new_format = format->get_union_format(new_data->get_format());
     CPT(GeomVertexFormat) new_format = format->get_union_format(new_data->get_format());
     new_data->set_format(new_format);
     new_data->set_format(new_format);
     nassertr(offset == new_data->get_num_rows(), 0);
     nassertr(offset == new_data->get_num_rows(), 0);
+
+    // Also, convert (non-destructively) the current Geom's vertex
+    // data to the new format, so we can just blindly append the
+    // vertices to new_data, in the lines below.
+    vdata = vdata->convert_to(new_format);
+    format = new_format;
   }
   }
 
 
   new_data->set_num_rows(new_num_vertices);
   new_data->set_num_rows(new_num_vertices);