diff --git a/panda/src/pgraph/geomTransformer.cxx b/panda/src/pgraph/geomTransformer.cxx index 3e00020513..fd1c21291e 100644 --- a/panda/src/pgraph/geomTransformer.cxx +++ b/panda/src/pgraph/geomTransformer.cxx @@ -391,14 +391,14 @@ apply_state(GeomNode *node, const RenderState *state) { //////////////////////////////////////////////////////////////////// int GeomTransformer:: 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) { // Don't even bother. return 0; } - const GeomVertexFormat *format = vdata->get_format(); + CPT(GeomVertexFormat) format = vdata->get_format(); NewCollectedKey key; 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()); new_data->set_format(new_format); 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);