fix vbuffer pstats reporting

This commit is contained in:
David Rose 2005-03-18 17:27:15 +00:00
parent 0edc10b609
commit 7a305f825f
5 changed files with 33 additions and 25 deletions

View File

@ -47,8 +47,8 @@ PStatCollector GraphicsStateGuardian::_total_texusage_pcollector("Texture usage"
PStatCollector GraphicsStateGuardian::_active_texusage_pcollector("Texture usage:Active"); PStatCollector GraphicsStateGuardian::_active_texusage_pcollector("Texture usage:Active");
PStatCollector GraphicsStateGuardian::_total_geom_pcollector("Prepared Geoms"); PStatCollector GraphicsStateGuardian::_total_geom_pcollector("Prepared Geoms");
PStatCollector GraphicsStateGuardian::_active_geom_pcollector("Prepared Geoms:Active"); PStatCollector GraphicsStateGuardian::_active_geom_pcollector("Prepared Geoms:Active");
PStatCollector GraphicsStateGuardian::_total_buffers_pcollector("Vertex Buffers"); PStatCollector GraphicsStateGuardian::_total_buffers_pcollector("Vertex buffers");
PStatCollector GraphicsStateGuardian::_active_buffers_pcollector("Vertex Buffers:Active"); PStatCollector GraphicsStateGuardian::_active_buffers_pcollector("Vertex buffers:Active");
PStatCollector GraphicsStateGuardian::_total_geom_node_pcollector("Prepared GeomNodes"); PStatCollector GraphicsStateGuardian::_total_geom_node_pcollector("Prepared GeomNodes");
PStatCollector GraphicsStateGuardian::_active_geom_node_pcollector("Prepared GeomNodes:Active"); PStatCollector GraphicsStateGuardian::_active_geom_node_pcollector("Prepared GeomNodes:Active");
PStatCollector GraphicsStateGuardian::_total_texmem_pcollector("Texture memory"); PStatCollector GraphicsStateGuardian::_total_texmem_pcollector("Texture memory");
@ -1443,6 +1443,7 @@ init_frame_pstats() {
if (PStatClient::is_connected()) { if (PStatClient::is_connected()) {
_current_textures.clear(); _current_textures.clear();
_current_geoms.clear(); _current_geoms.clear();
_current_datas.clear();
_active_texusage_pcollector.clear_level(); _active_texusage_pcollector.clear_level();
_active_geom_pcollector.clear_level(); _active_geom_pcollector.clear_level();
_active_geom_node_pcollector.clear_level(); _active_geom_node_pcollector.clear_level();
@ -1506,11 +1507,13 @@ add_to_geom_record(GeomContext *gc) {
//////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////
void GraphicsStateGuardian:: void GraphicsStateGuardian::
add_to_data_record(DataContext *dc) { add_to_data_record(DataContext *dc) {
if (PStatClient::is_connected()) { if (dc != (DataContext *)NULL) {
if (dc != (DataContext *)NULL && _current_datas.insert(dc).second) { int delta = dc->get_data()->get_num_bytes() - dc->get_num_bytes();
int delta = dc->get_data()->get_num_bytes() - dc->get_num_bytes(); _total_buffers_pcollector.add_level(delta);
_total_buffers_pcollector.add_level(delta); if (PStatClient::is_connected()) {
_active_buffers_pcollector.add_level(dc->get_data()->get_num_bytes()); if (_current_datas.insert(dc).second) {
_active_buffers_pcollector.add_level(dc->get_data()->get_num_bytes());
}
} }
} }
} }

View File

@ -2357,12 +2357,14 @@ prepare_data(qpGeomVertexArrayData *data) {
CLP(DataContext) *gdc = new CLP(DataContext)(data); CLP(DataContext) *gdc = new CLP(DataContext)(data);
_glGenBuffers(1, &gdc->_index); _glGenBuffers(1, &gdc->_index);
add_to_data_record(gdc); /*
_glBindBuffer(GL_ARRAY_BUFFER, gdc->_index); _glBindBuffer(GL_ARRAY_BUFFER, gdc->_index);
_glBufferData(GL_ARRAY_BUFFER, gdc->get_data()->get_num_bytes(), _glBufferData(GL_ARRAY_BUFFER, gdc->get_data()->get_num_bytes(),
gdc->get_data()->get_data(), gdc->get_data()->get_data(),
get_usage(gdc->get_data()->get_usage_hint())); get_usage(gdc->get_data()->get_usage_hint()));
add_to_data_record(gdc);
gdc->mark_loaded(); gdc->mark_loaded();
*/
report_my_gl_errors(); report_my_gl_errors();
return gdc; return gdc;
@ -2383,9 +2385,9 @@ apply_data(DataContext *dc) {
CLP(DataContext) *gdc = DCAST(CLP(DataContext), dc); CLP(DataContext) *gdc = DCAST(CLP(DataContext), dc);
add_to_data_record(gdc);
_glBindBuffer(GL_ARRAY_BUFFER, gdc->_index); _glBindBuffer(GL_ARRAY_BUFFER, gdc->_index);
add_to_data_record(gdc);
if (gdc->was_modified()) { if (gdc->was_modified()) {
if (GLCAT.is_debug()) { if (GLCAT.is_debug()) {
GLCAT.debug() GLCAT.debug()

View File

@ -24,7 +24,7 @@
#include "mutexHolder.h" #include "mutexHolder.h"
PStatCollector PreparedGraphicsObjects::_total_texusage_pcollector("Texture usage"); PStatCollector PreparedGraphicsObjects::_total_texusage_pcollector("Texture usage");
PStatCollector PreparedGraphicsObjects::_total_buffers_pcollector("Vertex Buffers"); PStatCollector PreparedGraphicsObjects::_total_buffers_pcollector("Vertex buffers");
//////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////
// Function: PreparedGraphicsObjects::Constructor // Function: PreparedGraphicsObjects::Constructor
@ -512,7 +512,10 @@ prepare_data_now(qpGeomVertexArrayData *data, GraphicsStateGuardianBase *gsg) {
bool prepared = _prepared_datas.insert(dc).second; bool prepared = _prepared_datas.insert(dc).second;
nassertr(prepared, dc); nassertr(prepared, dc);
_total_buffers_pcollector.add_level(dc->get_num_bytes()); // The size has already been counted by
// GraphicsStateGuardian::add_to_data_record(); we don't need to
// count it again here.
//_total_buffers_pcollector.add_level(dc->get_num_bytes());
} }
return dc; return dc;

View File

@ -551,10 +551,8 @@ stop(int collector_index, int thread_index, float as_of) {
//////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////
void PStatClient:: void PStatClient::
clear_level(int collector_index, int thread_index) { clear_level(int collector_index, int thread_index) {
if (_collectors[collector_index].is_active()) { _collectors[collector_index]._per_thread[thread_index]._has_level = false;
_collectors[collector_index]._per_thread[thread_index]._has_level = false; _collectors[collector_index]._per_thread[thread_index]._level = 0.0;
_collectors[collector_index]._per_thread[thread_index]._level = 0.0;
}
} }
//////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////
@ -568,11 +566,13 @@ clear_level(int collector_index, int thread_index) {
//////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////
void PStatClient:: void PStatClient::
set_level(int collector_index, int thread_index, float level) { set_level(int collector_index, int thread_index, float level) {
if (client_is_connected() && _collectors[collector_index].is_active()) { // We don't want to condition this on whether the client is already
level *= get_collector_def(collector_index)->_factor; // connected or the collector is already active, since we might
_collectors[collector_index]._per_thread[thread_index]._has_level = true; // connect the client later, and we will want to have an accurate
_collectors[collector_index]._per_thread[thread_index]._level = level; // value at that time.
} level *= get_collector_def(collector_index)->_factor;
_collectors[collector_index]._per_thread[thread_index]._has_level = true;
_collectors[collector_index]._per_thread[thread_index]._level = level;
} }
//////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////
@ -588,11 +588,9 @@ set_level(int collector_index, int thread_index, float level) {
//////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////
void PStatClient:: void PStatClient::
add_level(int collector_index, int thread_index, float increment) { add_level(int collector_index, int thread_index, float increment) {
if (client_is_connected() && _collectors[collector_index].is_active()) { increment *= get_collector_def(collector_index)->_factor;
increment *= get_collector_def(collector_index)->_factor; _collectors[collector_index]._per_thread[thread_index]._has_level = true;
_collectors[collector_index]._per_thread[thread_index]._has_level = true; _collectors[collector_index]._per_thread[thread_index]._level += increment;
_collectors[collector_index]._per_thread[thread_index]._level += increment;
}
} }
//////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////

View File

@ -153,6 +153,8 @@ static LevelCollectorProperties level_properties[] = {
{ 1, "Prepared Geoms:Active", { 0.5, 1.0, 0.8 } }, { 1, "Prepared Geoms:Active", { 0.5, 1.0, 0.8 } },
{ 1, "Prepared GeomNodes", { 1.0, 0.0, 0.5 }, "", 500 }, { 1, "Prepared GeomNodes", { 1.0, 0.0, 0.5 }, "", 500 },
{ 1, "Prepared GeomNodes:Active", { 0.5, 1.0, 0.8 } }, { 1, "Prepared GeomNodes:Active", { 0.5, 1.0, 0.8 } },
{ 1, "Vertex buffers:Active", { 1.0, 0.0, 0.5 } },
{ 1, "Vertex buffers", { 0.0, 0.0, 1.0 }, "MB", 12, 1048576 },
{ 1, "Vertices", { 0.5, 0.2, 0.0 }, "K", 10, 1000 }, { 1, "Vertices", { 0.5, 0.2, 0.0 }, "K", 10, 1000 },
{ 1, "Vertices:Other", { 0.2, 0.2, 0.2 } }, { 1, "Vertices:Other", { 0.2, 0.2, 0.2 } },
{ 1, "Vertices:Triangles", { 0.8, 0.8, 0.8 } }, { 1, "Vertices:Triangles", { 0.8, 0.8, 0.8 } },