From Jan Peciva, "attaching improved StatsVisitor. Changes:

- apply() and reset() methods made virtual to allow overriding
- added apply(StateSet&) to make more easier to gather StateAttribute
statistics in user-derived classes
"
This commit is contained in:
Robert Osfield
2012-02-06 12:36:25 +00:00
parent 6ebe48d6bb
commit 38b17bc5fa
2 changed files with 30 additions and 26 deletions

View File

@@ -119,7 +119,6 @@ void Statistics::add(const Statistics& stats)
numOrderedLeaves += stats.numOrderedLeaves;
_vertexCount += stats._vertexCount;
// _primitiveCount += stats._primitiveCount;
for(PrimitiveValueMap::const_iterator pitr = stats._primitiveCount.begin();
pitr != stats._primitiveCount.end();
++pitr)
@@ -184,9 +183,9 @@ void StatsVisitor::apply(osg::Node& node)
{
if (node.getStateSet())
{
++_numInstancedStateSet;
_statesetSet.insert(node.getStateSet());
apply(*node.getStateSet());
}
traverse(node);
}
@@ -194,12 +193,12 @@ void StatsVisitor::apply(osg::Group& node)
{
if (node.getStateSet())
{
++_numInstancedStateSet;
_statesetSet.insert(node.getStateSet());
apply(*node.getStateSet());
}
++_numInstancedGroup;
_groupSet.insert(&node);
traverse(node);
}
@@ -207,12 +206,12 @@ void StatsVisitor::apply(osg::Transform& node)
{
if (node.getStateSet())
{
++_numInstancedStateSet;
_statesetSet.insert(node.getStateSet());
apply(*node.getStateSet());
}
++_numInstancedTransform;
_transformSet.insert(&node);
traverse(node);
}
@@ -220,12 +219,12 @@ void StatsVisitor::apply(osg::LOD& node)
{
if (node.getStateSet())
{
++_numInstancedStateSet;
_statesetSet.insert(node.getStateSet());
apply(*node.getStateSet());
}
++_numInstancedLOD;
_lodSet.insert(&node);
traverse(node);
}
@@ -233,12 +232,12 @@ void StatsVisitor::apply(osg::Switch& node)
{
if (node.getStateSet())
{
++_numInstancedStateSet;
_statesetSet.insert(node.getStateSet());
apply(*node.getStateSet());
}
++_numInstancedSwitch;
_switchSet.insert(&node);
traverse(node);
}
@@ -246,8 +245,7 @@ void StatsVisitor::apply(osg::Geode& node)
{
if (node.getStateSet())
{
++_numInstancedStateSet;
_statesetSet.insert(node.getStateSet());
apply(*node.getStateSet());
}
++_numInstancedGeode;
@@ -265,8 +263,7 @@ void StatsVisitor::apply(osg::Drawable& drawable)
{
if (drawable.getStateSet())
{
++_numInstancedStateSet;
_statesetSet.insert(drawable.getStateSet());
apply(*drawable.getStateSet());
}
++_numInstancedDrawable;
@@ -289,6 +286,12 @@ void StatsVisitor::apply(osg::Drawable& drawable)
}
}
void StatsVisitor::apply(osg::StateSet& stateSet)
{
++_numInstancedStateSet;
_statesetSet.insert(&stateSet);
}
void StatsVisitor::totalUpStats()
{
_uniqueStats.reset();