From 9a44ab44406ee83f6a02a3ceeda54999d1edc127 Mon Sep 17 00:00:00 2001 From: Robert Osfield Date: Mon, 25 Jul 2011 17:08:57 +0000 Subject: [PATCH] Merged from svn/trunk revision 12818, "Fixed stats bug where not all stats fields were being collected by the cull_draw() method used in the SingleThreaded and CullDrawThreadPerContext threading models." --- src/osgViewer/Renderer.cpp | 86 ++++++++++++++++++-------------------- 1 file changed, 40 insertions(+), 46 deletions(-) diff --git a/src/osgViewer/Renderer.cpp b/src/osgViewer/Renderer.cpp index 940d9a412..b4f339772 100644 --- a/src/osgViewer/Renderer.cpp +++ b/src/osgViewer/Renderer.cpp @@ -544,6 +544,44 @@ void Renderer::compile() sceneView->getState()->checkGLErrors("After Renderer::compile"); } +static void collectSceneViewStats(unsigned int frameNumber, osgUtil::SceneView* sceneView, osg::Stats* stats) +{ + osgUtil::Statistics sceneStats; + sceneView->getStats(sceneStats); + + stats->setAttribute(frameNumber, "Visible vertex count", static_cast(sceneStats._vertexCount)); + stats->setAttribute(frameNumber, "Visible number of drawables", static_cast(sceneStats.numDrawables)); + stats->setAttribute(frameNumber, "Visible number of fast drawables", static_cast(sceneStats.numFastDrawables)); + stats->setAttribute(frameNumber, "Visible number of lights", static_cast(sceneStats.nlights)); + stats->setAttribute(frameNumber, "Visible number of render bins", static_cast(sceneStats.nbins)); + stats->setAttribute(frameNumber, "Visible depth", static_cast(sceneStats.depth)); + stats->setAttribute(frameNumber, "Number of StateGraphs", static_cast(sceneStats.numStateGraphs)); + stats->setAttribute(frameNumber, "Visible number of impostors", static_cast(sceneStats.nimpostor)); + stats->setAttribute(frameNumber, "Number of ordered leaves", static_cast(sceneStats.numOrderedLeaves)); + + unsigned int totalNumPrimitiveSets = 0; + const osgUtil::Statistics::PrimitiveValueMap& pvm = sceneStats.getPrimitiveValueMap(); + for(osgUtil::Statistics::PrimitiveValueMap::const_iterator pvm_itr = pvm.begin(); + pvm_itr != pvm.end(); + ++pvm_itr) + { + totalNumPrimitiveSets += pvm_itr->second.first; + } + stats->setAttribute(frameNumber, "Visible number of PrimitiveSets", static_cast(totalNumPrimitiveSets)); + + osgUtil::Statistics::PrimitiveCountMap& pcm = sceneStats.getPrimitiveCountMap(); + stats->setAttribute(frameNumber, "Visible number of GL_POINTS", static_cast(pcm[GL_POINTS])); + stats->setAttribute(frameNumber, "Visible number of GL_LINES", static_cast(pcm[GL_LINES])); + stats->setAttribute(frameNumber, "Visible number of GL_LINE_STRIP", static_cast(pcm[GL_LINE_STRIP])); + stats->setAttribute(frameNumber, "Visible number of GL_LINE_LOOP", static_cast(pcm[GL_LINE_LOOP])); + stats->setAttribute(frameNumber, "Visible number of GL_TRIANGLES", static_cast(pcm[GL_TRIANGLES])); + stats->setAttribute(frameNumber, "Visible number of GL_TRIANGLE_STRIP", static_cast(pcm[GL_TRIANGLE_STRIP])); + stats->setAttribute(frameNumber, "Visible number of GL_TRIANGLE_FAN", static_cast(pcm[GL_TRIANGLE_FAN])); + stats->setAttribute(frameNumber, "Visible number of GL_QUADS", static_cast(pcm[GL_QUADS])); + stats->setAttribute(frameNumber, "Visible number of GL_QUAD_STRIP", static_cast(pcm[GL_QUAD_STRIP])); + stats->setAttribute(frameNumber, "Visible number of GL_POLYGON", static_cast(pcm[GL_POLYGON])); +} + void Renderer::cull() { DEBUG_MESSAGE<<"cull()"<collectStats("scene")) { - osgUtil::Statistics sceneStats; - sceneView->getStats(sceneStats); - - stats->setAttribute(frameNumber, "Visible vertex count", static_cast(sceneStats._vertexCount)); - stats->setAttribute(frameNumber, "Visible number of drawables", static_cast(sceneStats.numDrawables)); - stats->setAttribute(frameNumber, "Visible number of fast drawables", static_cast(sceneStats.numFastDrawables)); - stats->setAttribute(frameNumber, "Visible number of lights", static_cast(sceneStats.nlights)); - stats->setAttribute(frameNumber, "Visible number of render bins", static_cast(sceneStats.nbins)); - stats->setAttribute(frameNumber, "Visible depth", static_cast(sceneStats.depth)); - stats->setAttribute(frameNumber, "Number of StateGraphs", static_cast(sceneStats.numStateGraphs)); - stats->setAttribute(frameNumber, "Visible number of impostors", static_cast(sceneStats.nimpostor)); - stats->setAttribute(frameNumber, "Number of ordered leaves", static_cast(sceneStats.numOrderedLeaves)); - - unsigned int totalNumPrimitiveSets = 0; - const osgUtil::Statistics::PrimitiveValueMap& pvm = sceneStats.getPrimitiveValueMap(); - for(osgUtil::Statistics::PrimitiveValueMap::const_iterator pvm_itr = pvm.begin(); - pvm_itr != pvm.end(); - ++pvm_itr) - { - totalNumPrimitiveSets += pvm_itr->second.first; - } - stats->setAttribute(frameNumber, "Visible number of PrimitiveSets", static_cast(totalNumPrimitiveSets)); - - osgUtil::Statistics::PrimitiveCountMap& pcm = sceneStats.getPrimitiveCountMap(); - stats->setAttribute(frameNumber, "Visible number of GL_POINTS", static_cast(pcm[GL_POINTS])); - stats->setAttribute(frameNumber, "Visible number of GL_LINES", static_cast(pcm[GL_LINES])); - stats->setAttribute(frameNumber, "Visible number of GL_LINE_STRIP", static_cast(pcm[GL_LINE_STRIP])); - stats->setAttribute(frameNumber, "Visible number of GL_LINE_LOOP", static_cast(pcm[GL_LINE_LOOP])); - stats->setAttribute(frameNumber, "Visible number of GL_TRIANGLES", static_cast(pcm[GL_TRIANGLES])); - stats->setAttribute(frameNumber, "Visible number of GL_TRIANGLE_STRIP", static_cast(pcm[GL_TRIANGLE_STRIP])); - stats->setAttribute(frameNumber, "Visible number of GL_TRIANGLE_FAN", static_cast(pcm[GL_TRIANGLE_FAN])); - stats->setAttribute(frameNumber, "Visible number of GL_QUADS", static_cast(pcm[GL_QUADS])); - stats->setAttribute(frameNumber, "Visible number of GL_QUAD_STRIP", static_cast(pcm[GL_QUAD_STRIP])); - stats->setAttribute(frameNumber, "Visible number of GL_POLYGON", static_cast(pcm[GL_POLYGON])); - + collectSceneViewStats(frameNumber, sceneView, stats); } _drawQueue.add(sceneView); @@ -808,17 +812,7 @@ void Renderer::cull_draw() if (stats && stats->collectStats("scene")) { - osgUtil::Statistics sceneStats; - sceneView->getStats(sceneStats); - - stats->setAttribute(frameNumber, "Visible vertex count", static_cast(sceneStats._vertexCount)); - stats->setAttribute(frameNumber, "Visible number of drawables", static_cast(sceneStats.numDrawables)); - stats->setAttribute(frameNumber, "Visible number of lights", static_cast(sceneStats.nlights)); - stats->setAttribute(frameNumber, "Visible number of render bins", static_cast(sceneStats.nbins)); - stats->setAttribute(frameNumber, "Visible depth", static_cast(sceneStats.depth)); - stats->setAttribute(frameNumber, "Number of StateGraphs", static_cast(sceneStats.numStateGraphs)); - stats->setAttribute(frameNumber, "Visible number of impostors", static_cast(sceneStats.nimpostor)); - stats->setAttribute(frameNumber, "Number of ordered leaves", static_cast(sceneStats.numOrderedLeaves)); + collectSceneViewStats(frameNumber, sceneView, stats); } #if 0