diff --git a/include/osgUtil/Statistics b/include/osgUtil/Statistics index 666c8ea15..2520c7ff2 100644 --- a/include/osgUtil/Statistics +++ b/include/osgUtil/Statistics @@ -244,6 +244,7 @@ public: typedef std::set NodeSet; typedef std::set DrawableSet; + typedef std::set StateSetSet; StatsVisitor(): osg::NodeVisitor(osg::NodeVisitor::TRAVERSE_ALL_CHILDREN), @@ -253,7 +254,8 @@ public: _numInstancedTransform(0), _numInstancedGeode(0), _numInstancedDrawable(0), - _numInstancedGeometry(0) {} + _numInstancedGeometry(0), + _numInstancedStateSet(0) {} void reset() { @@ -264,6 +266,7 @@ public: _numInstancedGeode = 0; _numInstancedDrawable = 0; _numInstancedGeometry = 0; + _numInstancedStateSet = 0; _groupSet.clear(); _transformSet.clear(); @@ -272,13 +275,30 @@ public: _geodeSet.clear(); _drawableSet.clear(); _geometrySet.clear(); + _statesetSet.clear(); _uniqueStats.reset(); _instancedStats.reset(); } + void apply(osg::Node& node) + { + if (node.getStateSet()) + { + ++_numInstancedStateSet; + _statesetSet.insert(node.getStateSet()); + } + traverse(node); + } + void apply(osg::Group& node) { + if (node.getStateSet()) + { + ++_numInstancedStateSet; + _statesetSet.insert(node.getStateSet()); + } + ++_numInstancedGroup; _groupSet.insert(&node); traverse(node); @@ -286,6 +306,12 @@ public: void apply(osg::Transform& node) { + if (node.getStateSet()) + { + ++_numInstancedStateSet; + _statesetSet.insert(node.getStateSet()); + } + ++_numInstancedTransform; _transformSet.insert(&node); traverse(node); @@ -293,6 +319,12 @@ public: void apply(osg::LOD& node) { + if (node.getStateSet()) + { + ++_numInstancedStateSet; + _statesetSet.insert(node.getStateSet()); + } + ++_numInstancedLOD; _lodSet.insert(&node); traverse(node); @@ -300,6 +332,12 @@ public: void apply(osg::Switch& node) { + if (node.getStateSet()) + { + ++_numInstancedStateSet; + _statesetSet.insert(node.getStateSet()); + } + ++_numInstancedSwitch; _switchSet.insert(&node); traverse(node); @@ -307,6 +345,12 @@ public: void apply(osg::Geode& node) { + if (node.getStateSet()) + { + ++_numInstancedStateSet; + _statesetSet.insert(node.getStateSet()); + } + ++_numInstancedGeode; _geodeSet.insert(&node); @@ -320,6 +364,12 @@ public: void apply(osg::Drawable& drawable) { + if (drawable.getStateSet()) + { + ++_numInstancedStateSet; + _statesetSet.insert(drawable.getStateSet()); + } + ++_numInstancedDrawable; drawable.accept(_instancedStats); @@ -367,6 +417,7 @@ public: } out<<"Object Type\t#Unique\t#Instanced"<