diff --git a/panda/src/gobj/geomEnums.cxx b/panda/src/gobj/geomEnums.cxx index 4116a84c67..e105b0c246 100644 --- a/panda/src/gobj/geomEnums.cxx +++ b/panda/src/gobj/geomEnums.cxx @@ -19,7 +19,7 @@ //////////////////////////////////////////////////////////////////// // Function: GeomEnums::UsageHint output operator -// Description: +// Description: //////////////////////////////////////////////////////////////////// ostream & operator << (ostream &out, GeomEnums::UsageHint usage_hint) { @@ -45,7 +45,7 @@ operator << (ostream &out, GeomEnums::UsageHint usage_hint) { //////////////////////////////////////////////////////////////////// // Function: GeomEnums::UsageHint input operator -// Description: +// Description: //////////////////////////////////////////////////////////////////// istream & operator >> (istream &in, GeomEnums::UsageHint &usage_hint) { @@ -73,32 +73,32 @@ operator >> (istream &in, GeomEnums::UsageHint &usage_hint) { //////////////////////////////////////////////////////////////////// // Function: GeomEnums::NumericType output operator -// Description: +// Description: //////////////////////////////////////////////////////////////////// ostream & operator << (ostream &out, GeomEnums::NumericType numeric_type) { switch (numeric_type) { case GeomEnums::NT_uint8: return out << "uint8"; - + case GeomEnums::NT_uint16: return out << "uint16"; - + case GeomEnums::NT_uint32: return out << "uint32"; - + case GeomEnums::NT_packed_dcba: return out << "packed_dcba"; - + case GeomEnums::NT_packed_dabc: return out << "packed_dabc"; - + case GeomEnums::NT_float32: return out << "float32"; - + case GeomEnums::NT_float64: return out << "float64"; - + case GeomEnums::NT_stdfloat: return out << "stdfloat"; } @@ -108,7 +108,7 @@ operator << (ostream &out, GeomEnums::NumericType numeric_type) { //////////////////////////////////////////////////////////////////// // Function: GeomEnums::Contents output operator -// Description: +// Description: //////////////////////////////////////////////////////////////////// ostream & operator << (ostream &out, GeomEnums::Contents contents) { @@ -136,6 +136,9 @@ operator << (ostream &out, GeomEnums::Contents contents) { case GeomEnums::C_morph_delta: return out << "morph_delta"; + + case GeomEnums::C_matrix: + return out << "matrix"; } return out << "**invalid contents (" << (int)contents << ")**"; diff --git a/panda/src/gobj/geomPrimitive.cxx b/panda/src/gobj/geomPrimitive.cxx index bfcd26df81..32ce676486 100644 --- a/panda/src/gobj/geomPrimitive.cxx +++ b/panda/src/gobj/geomPrimitive.cxx @@ -295,11 +295,14 @@ add_consecutive_vertices(int start, int num_vertices) { } PT(GeomVertexArrayData) array_obj = cdata->_vertices.get_write_pointer(); + int old_num_rows = array_obj->get_num_rows(); + array_obj->unclean_set_num_rows(old_num_rows + num_vertices); + GeomVertexWriter index(array_obj, 0); - index.set_row_unsafe(array_obj->get_num_rows()); + index.set_row_unsafe(old_num_rows); for (int v = start; v <= end; ++v) { - index.add_data1i(v); + index.set_data1i(v); } cdata->_modified = Geom::get_next_modified(); @@ -1019,11 +1022,13 @@ make_points() const { // Now construct a new index array with just those bits. PT(GeomVertexArrayData) new_vertices = make_index_data(); + new_vertices->unclean_set_num_rows(bits.get_num_on_bits()); + GeomVertexWriter new_index(new_vertices, 0); int p = bits.get_lowest_on_bit(); while (p != -1) { while (bits.get_bit(p)) { - new_index.add_data1i(p); + new_index.set_data1i(p); ++p; } int q = bits.get_next_higher_different_bit(p); @@ -2020,10 +2025,14 @@ recompute_minmax(GeomPrimitive::CData *cdata) { cdata->_mins = make_index_data(); cdata->_maxs = make_index_data(); - GeomVertexWriter mins(cdata->_mins.get_write_pointer(), 0); - mins.reserve_num_rows(cdata->_ends.size()); - GeomVertexWriter maxs(cdata->_maxs.get_write_pointer(), 0); - maxs.reserve_num_rows(cdata->_ends.size()); + GeomVertexArrayData *mins_data = cdata->_mins.get_write_pointer(); + GeomVertexArrayData *maxs_data = cdata->_maxs.get_write_pointer(); + + mins_data->unclean_set_num_rows(cdata->_ends.size()); + maxs_data->unclean_set_num_rows(cdata->_ends.size()); + + GeomVertexWriter mins(mins_data, 0); + GeomVertexWriter maxs(maxs_data, 0); int pi = 0; @@ -2050,8 +2059,8 @@ recompute_minmax(GeomPrimitive::CData *cdata) { } vertex = index.get_data1i(); - mins.add_data1i(min_prim); - maxs.add_data1i(max_prim); + mins.set_data1i(min_prim); + maxs.set_data1i(max_prim); min_prim = vertex; max_prim = vertex; ++pi; @@ -2066,8 +2075,8 @@ recompute_minmax(GeomPrimitive::CData *cdata) { cdata->_max_vertex = max(cdata->_max_vertex, vertex); } - mins.add_data1i(min_prim); - maxs.add_data1i(max_prim); + mins.set_data1i(min_prim); + maxs.set_data1i(max_prim); nassertv(mins.get_array_data()->get_num_rows() == (int)cdata->_ends.size()); } else { @@ -2109,10 +2118,13 @@ do_make_indexed(CData *cdata) { nassertv(cdata->_num_vertices != -1); cdata->_vertices = make_index_data(); - GeomVertexWriter index(cdata->_vertices.get_write_pointer(), 0); - index.reserve_num_rows(cdata->_num_vertices); + + GeomVertexArrayData *array_data = cdata->_vertices.get_write_pointer(); + array_data->unclean_set_num_rows(cdata->_num_vertices); + GeomVertexWriter index(array_data, 0); + for (int i = 0; i < cdata->_num_vertices; ++i) { - index.add_data1i(i + cdata->_first_vertex); + index.set_data1i(i + cdata->_first_vertex); } cdata->_num_vertices = -1; } diff --git a/panda/src/gobj/preparedGraphicsObjects.cxx b/panda/src/gobj/preparedGraphicsObjects.cxx index 233e4ce9fe..ee694450aa 100644 --- a/panda/src/gobj/preparedGraphicsObjects.cxx +++ b/panda/src/gobj/preparedGraphicsObjects.cxx @@ -1538,7 +1538,11 @@ begin_frame(GraphicsStateGuardianBase *gsg, Thread *current_thread) { qibi != _enqueued_index_buffers.end(); ++qibi) { GeomPrimitive *data = (*qibi); - data->prepare_now(this, gsg); + // We need this check because the actual index data may + // not actually have propagated to the draw thread yet. + if (data->is_indexed()) { + data->prepare_now(this, gsg); + } } _enqueued_index_buffers.clear(); diff --git a/panda/src/pgraph/cullableObject.cxx b/panda/src/pgraph/cullableObject.cxx index 73c049ca15..14a6bad1d0 100644 --- a/panda/src/pgraph/cullableObject.cxx +++ b/panda/src/pgraph/cullableObject.cxx @@ -363,7 +363,6 @@ munge_points_to_quads(const CullTraverser *traverser, bool force) { // Get the point in eye-space coordinates. LPoint3 eye = internal.xform_point(vertex.get_data3()); PN_stdfloat dist = gsg->compute_distance_to(eye); - points[vi]._eye = eye; points[vi]._dist = dist; // The point in clip coordinates. diff --git a/panda/src/pgraph/cullableObject.h b/panda/src/pgraph/cullableObject.h index 04250201f6..575ae4c35f 100644 --- a/panda/src/pgraph/cullableObject.h +++ b/panda/src/pgraph/cullableObject.h @@ -92,7 +92,6 @@ private: // This class is used internally by munge_points_to_quads(). class PointData { public: - LPoint3 _eye; PN_stdfloat _dist; }; class SortPoints {