From 764b2f60c610fb98b432dd20746da13309e547fd Mon Sep 17 00:00:00 2001 From: scrawl Date: Fri, 20 Jan 2017 21:25:32 +0100 Subject: [PATCH] TextureAtlasVisitor: fix handling of Drawables that are directly in the scene graph not attached to a Geode --- include/osgUtil/Optimizer | 3 +-- src/osgUtil/Optimizer.cpp | 51 ++++++++++----------------------------- 2 files changed, 14 insertions(+), 40 deletions(-) diff --git a/include/osgUtil/Optimizer b/include/osgUtil/Optimizer index 032952259..0a7c97748 100644 --- a/include/osgUtil/Optimizer +++ b/include/osgUtil/Optimizer @@ -814,8 +814,7 @@ class OSGUTIL_EXPORT Optimizer virtual void reset(); virtual void apply(osg::Node& node); - - virtual void apply(osg::Geode& geode); + virtual void apply(osg::Drawable& node); void optimize(); diff --git a/src/osgUtil/Optimizer.cpp b/src/osgUtil/Optimizer.cpp index 42ad887d7..179d74b6e 100644 --- a/src/osgUtil/Optimizer.cpp +++ b/src/osgUtil/Optimizer.cpp @@ -4093,56 +4093,31 @@ void Optimizer::TextureAtlasVisitor::apply(osg::Node& node) if (pushedStateState) popStateSet(); } -void Optimizer::TextureAtlasVisitor::apply(osg::Geode& geode) +void Optimizer::TextureAtlasVisitor::apply(osg::Drawable& node) { - if (!isOperationPermissibleForObject(&geode)) return; - - osg::StateSet* ss = geode.getStateSet(); - - - bool pushedGeodeStateState = false; + bool pushedStateState = false; + osg::StateSet* ss = node.getStateSet(); if (ss && ss->getDataVariance()==osg::Object::STATIC) { - if (isOperationPermissibleForObject(ss)) + if (isOperationPermissibleForObject(&node) && + isOperationPermissibleForObject(ss)) { - pushedGeodeStateState = pushStateSet(ss); + pushedStateState = pushStateSet(ss); } } - for(unsigned int i=0;igetStateSet(); - if (ss && ss->getDataVariance()==osg::Object::STATIC) - { - if (isOperationPermissibleForObject(drawable) && - isOperationPermissibleForObject(ss)) - { - pushedDrawableStateState = pushStateSet(ss); - } - } - - if (!_statesetStack.empty()) - { - for(StateSetStack::iterator ssitr = _statesetStack.begin(); - ssitr != _statesetStack.end(); - ++ssitr) - { - _statesetMap[*ssitr].insert(drawable); - } - } - - if (pushedDrawableStateState) popStateSet(); + _statesetMap[*ssitr].insert(&node); } - } - if (pushedGeodeStateState) popStateSet(); + if (pushedStateState) popStateSet(); } void Optimizer::TextureAtlasVisitor::optimize()