diff --git a/panda/src/glstuff/glGraphicsStateGuardian_src.cxx b/panda/src/glstuff/glGraphicsStateGuardian_src.cxx index da61634c6d..3e08ae7e8b 100644 --- a/panda/src/glstuff/glGraphicsStateGuardian_src.cxx +++ b/panda/src/glstuff/glGraphicsStateGuardian_src.cxx @@ -2348,7 +2348,10 @@ release_geom(GeomContext *gc) { //////////////////////////////////////////////////////////////////// DataContext *CLP(GraphicsStateGuardian):: prepare_data(qpGeomVertexArrayData *data) { - cerr << "prepare_data\n"; + if (GLCAT.is_debug()) { + GLCAT.debug() + << "prepare_data(" << (void *)data << ")\n"; + } if (_supports_buffers) { CLP(DataContext) *gdc = new CLP(DataContext)(data); @@ -2375,7 +2378,10 @@ prepare_data(qpGeomVertexArrayData *data) { //////////////////////////////////////////////////////////////////// void CLP(GraphicsStateGuardian):: apply_data(DataContext *dc) { - cerr << "apply_data\n"; + if (GLCAT.is_debug()) { + GLCAT.debug() + << "apply_data(" << (void *)dc->_data << ")\n"; + } nassertv(_supports_buffers); @@ -2404,7 +2410,10 @@ apply_data(DataContext *dc) { //////////////////////////////////////////////////////////////////// void CLP(GraphicsStateGuardian):: release_data(DataContext *dc) { - cerr << "release_data\n"; + if (GLCAT.is_debug()) { + GLCAT.debug() + << "release_data(" << (void *)dc->_data << ")\n"; + } nassertv(_supports_buffers); diff --git a/panda/src/gobj/qpgeomVertexData.I b/panda/src/gobj/qpgeomVertexData.I index 8ebc1f3c78..febe7a2bb4 100644 --- a/panda/src/gobj/qpgeomVertexData.I +++ b/panda/src/gobj/qpgeomVertexData.I @@ -28,6 +28,23 @@ get_format() const { return _format; } +//////////////////////////////////////////////////////////////////// +// Function: qpGeomVertexData::get_usage_hint +// Access: Published +// Description: Returns the usage hint that was passed to the +// constructor, and which will be passed to each array +// data object created initially. However, each +// individual array may be replaced with a different +// array object with an independent usage hint +// specified. +// +// See GeomVertexArrayData::get_usage_hint(). +//////////////////////////////////////////////////////////////////// +INLINE qpGeomVertexArrayData::UsageHint qpGeomVertexData:: +get_usage_hint() const { + return _usage_hint; +} + //////////////////////////////////////////////////////////////////// // Function: qpGeomVertexData::set_num_vertices // Access: Published diff --git a/panda/src/gobj/qpgeomVertexData.cxx b/panda/src/gobj/qpgeomVertexData.cxx index 184b9cf4bf..151ab820c5 100644 --- a/panda/src/gobj/qpgeomVertexData.cxx +++ b/panda/src/gobj/qpgeomVertexData.cxx @@ -45,7 +45,8 @@ qpGeomVertexData() { qpGeomVertexData:: qpGeomVertexData(const qpGeomVertexFormat *format, qpGeomVertexArrayData::UsageHint usage_hint) : - _format(format) + _format(format), + _usage_hint(usage_hint) { nassertv(_format->is_registered()); @@ -263,7 +264,7 @@ convert_to(const qpGeomVertexFormat *new_format) const { PStatTimer timer(_munge_data_pcollector); PT(qpGeomVertexData) new_data = - new qpGeomVertexData(new_format, qpGeomVertexArrayData::UH_client); + new qpGeomVertexData(new_format, get_usage_hint()); pset done_arrays; @@ -299,7 +300,7 @@ convert_to(const qpGeomVertexFormat *new_format) const { // Now go back through and copy any data that's left over. for (i = 0; i < num_arrays; ++i) { - CPTA_uchar data = get_array(i)->get_data(); + CPTA_uchar array_data = get_array(i)->get_data(); const qpGeomVertexArrayFormat *array_format = _format->get_array(i); int num_data_types = array_format->get_num_data_types(); for (int di = 0; di < num_data_types; ++di) { @@ -308,10 +309,8 @@ convert_to(const qpGeomVertexFormat *new_format) const { int new_i = new_format->get_array_with(data_type->get_name()); if (new_i >= 0 && done_arrays.count(new_i) == 0) { // The data type exists in the new format; we have to copy it. - PT(qpGeomVertexArrayData) new_array_data = new - qpGeomVertexArrayData(*get_array(i)); - new_data->set_array(new_i, new_array_data); - PTA_uchar new_data = new_array_data->modify_data(); + PTA_uchar new_array_data = + new_data->modify_array(new_i)->modify_data(); const qpGeomVertexArrayFormat *new_array_format = new_format->get_array(new_i); @@ -319,9 +318,9 @@ convert_to(const qpGeomVertexFormat *new_format) const { new_array_format->get_data_type(data_type->get_name()); new_data_type->copy_records - (new_data + new_data_type->get_start(), + (new_array_data + new_data_type->get_start(), new_array_format->get_stride(), - data + data_type->get_start(), array_format->get_stride(), + array_data + data_type->get_start(), array_format->get_stride(), data_type, num_vertices); } } diff --git a/panda/src/gobj/qpgeomVertexData.h b/panda/src/gobj/qpgeomVertexData.h index f1a568ce2c..66c8a01e01 100644 --- a/panda/src/gobj/qpgeomVertexData.h +++ b/panda/src/gobj/qpgeomVertexData.h @@ -69,6 +69,7 @@ PUBLISHED: virtual ~qpGeomVertexData(); INLINE const qpGeomVertexFormat *get_format() const; + INLINE qpGeomVertexArrayData::UsageHint get_usage_hint() const; int get_num_vertices() const; INLINE bool set_num_vertices(int n); @@ -112,6 +113,7 @@ private: private: CPT(qpGeomVertexFormat) _format; + qpGeomVertexArrayData::UsageHint _usage_hint; typedef pvector< PT(qpGeomVertexArrayData) > Arrays;