From Roland Smeenk, "this submission adds a "Fast Drawable" line to the camera scene statistics.

It shows the total number of sorted and unsorted drawables that use the fastpath for rendering."
This commit is contained in:
Robert Osfield 2010-09-09 10:03:58 +00:00
parent 77c35eabde
commit cbc43841e1
5 changed files with 25 additions and 2 deletions

View File

@ -102,6 +102,7 @@ class OSGUTIL_EXPORT Statistics : public osg::PrimitiveFunctor
virtual void end();
void addDrawable() { numDrawables++;}
void addFastDrawable() { numFastDrawables++;}
void addMatrix() { nummat++;}
void addLight(int np) { nlights+=np;}
void addImpostor(int np) { nimpostor+= np; }
@ -126,6 +127,7 @@ class OSGUTIL_EXPORT Statistics : public osg::PrimitiveFunctor
PrimitiveCountMap::iterator GetPrimitivesEnd() { return _primitives_count.end(); }
int numDrawables, nummat, nbins, numStateGraphs;
int numFastDrawables;
int nlights;
int depth; // depth into bins - eg 1.1,1.2,1.3 etc
int _binNo;

View File

@ -535,6 +535,14 @@ bool RenderBin::getStats(Statistics& stats) const
const RenderLeaf* rl = *dw_itr;
const Drawable* dw= rl->getDrawable();
stats.addDrawable(); // number of geosets
const Geometry* geom = dw->asGeometry();
if (geom)
{
if (geom->areFastPathsUsed())
stats.addFastDrawable();
}
if (rl->_modelview.get())
{
stats.addMatrix(); // number of matrices
@ -560,6 +568,14 @@ bool RenderBin::getStats(Statistics& stats) const
const RenderLeaf* rl = dw_itr->get();
const Drawable* dw= rl->getDrawable();
stats.addDrawable(); // number of geosets
const Geometry* geom = dw->asGeometry();
if (geom)
{
if (geom->areFastPathsUsed())
stats.addFastDrawable();
}
if (rl->_modelview.get()) stats.addMatrix(); // number of matrices
if (dw)
{

View File

@ -37,6 +37,7 @@ Statistics::Statistics()
void Statistics::reset()
{
numDrawables=0;
numFastDrawables=0;
nummat=0;
depth=0;
stattype=STAT_NONE;
@ -108,6 +109,7 @@ void Statistics::end()
void Statistics::add(const Statistics& stats)
{
numDrawables += stats.numDrawables;
numFastDrawables += stats.numFastDrawables;
nummat += stats.nummat;
depth += stats.depth;
nlights += stats.nlights;

View File

@ -377,6 +377,7 @@ void Renderer::cull()
stats->setAttribute(frameNumber, "Visible vertex count", static_cast<double>(sceneStats._vertexCount));
stats->setAttribute(frameNumber, "Visible number of drawables", static_cast<double>(sceneStats.numDrawables));
stats->setAttribute(frameNumber, "Visible number of fast drawables", static_cast<double>(sceneStats.numFastDrawables));
stats->setAttribute(frameNumber, "Visible number of lights", static_cast<double>(sceneStats.nlights));
stats->setAttribute(frameNumber, "Visible number of render bins", static_cast<double>(sceneStats.nbins));
stats->setAttribute(frameNumber, "Visible depth", static_cast<double>(sceneStats.depth));

View File

@ -416,6 +416,7 @@ struct CameraSceneStatsTextDrawCallback : public virtual osg::Drawable::DrawCall
STATS_ATTRIBUTE("Visible number of impostors")
STATS_ATTRIBUTE("Visible number of drawables")
STATS_ATTRIBUTE("Number of ordered leaves")
STATS_ATTRIBUTE("Visible number of fast drawables")
STATS_ATTRIBUTE("Visible vertex count")
STATS_ATTRIBUTE("Visible number of GL_POINTS")
@ -1409,7 +1410,7 @@ void StatsHandler::setUpScene(osgViewer::ViewerBase* viewer)
group->addChild(geode);
geode->addDrawable(createBackgroundRectangle(pos + osg::Vec3(-backgroundMargin, characterSize + backgroundMargin, 0),
10 * characterSize + 2 * backgroundMargin,
20 * characterSize + 2 * backgroundMargin,
21 * characterSize + 2 * backgroundMargin,
backgroundColor));
// Camera scene & primitive stats static text
@ -1433,6 +1434,7 @@ void StatsHandler::setUpScene(osgViewer::ViewerBase* viewer)
viewStr << "Imposters" << std::endl;
viewStr << "Drawables" << std::endl;
viewStr << "Sorted Drawables" << std::endl;
viewStr << "Fast Drawables" << std::endl;
viewStr << "Vertices" << std::endl;
viewStr << "Points" << std::endl;
viewStr << "Lines" << std::endl;
@ -1456,7 +1458,7 @@ void StatsHandler::setUpScene(osgViewer::ViewerBase* viewer)
{
geode->addDrawable(createBackgroundRectangle(pos + osg::Vec3(-backgroundMargin, characterSize + backgroundMargin, 0),
5 * characterSize + 2 * backgroundMargin,
20 * characterSize + 2 * backgroundMargin,
21 * characterSize + 2 * backgroundMargin,
backgroundColor));
// Camera scene stats