From 6cff8650f2fbf9d61aa75f0b1ff9174cf7fc9ee5 Mon Sep 17 00:00:00 2001 From: Robert Osfield Date: Tue, 7 Apr 2015 15:49:06 +0000 Subject: [PATCH] Cleaned up handling of Drawables so it utilizes the Node inheritance properly. git-svn-id: http://svn.openscenegraph.org/osg/OpenSceneGraph/trunk@14822 16af8721-9629-0410-8352-f15c8da7e697 --- include/osgUtil/Optimizer | 6 +++--- src/osgDB/SharedStateManager.cpp | 15 ++------------- src/osgGA/StateSetManipulator.cpp | 10 ++-------- src/osgUtil/Optimizer.cpp | 25 ++++++------------------- 4 files changed, 13 insertions(+), 43 deletions(-) diff --git a/include/osgUtil/Optimizer b/include/osgUtil/Optimizer index 1014b9c41..e38fc0514 100644 --- a/include/osgUtil/Optimizer +++ b/include/osgUtil/Optimizer @@ -461,15 +461,15 @@ class OSGUTIL_EXPORT Optimizer protected: - void addStateSet(osg::StateSet* stateset,osg::Object* obj); + void addStateSet(osg::StateSet* stateset, osg::Node* node); inline bool optimize(osg::Object::DataVariance variance) { return _optimize[variance]; } - typedef std::set ObjectSet; - typedef std::map StateSetMap; + typedef std::set NodeSet; + typedef std::map StateSetMap; // note, one element for DYNAMIC, STATIC and UNSPECIFIED bool _optimize[3]; diff --git a/src/osgDB/SharedStateManager.cpp b/src/osgDB/SharedStateManager.cpp index b0b1baa32..346310aea 100644 --- a/src/osgDB/SharedStateManager.cpp +++ b/src/osgDB/SharedStateManager.cpp @@ -162,19 +162,8 @@ osg::StateAttribute *SharedStateManager::find(osg::StateAttribute *sa) //---------------------------------------------------------------- void SharedStateManager::setStateSet(osg::StateSet* ss, osg::Object* object) { - osg::Drawable* drawable = dynamic_cast(object); - if (drawable) - { - drawable->setStateSet(ss); - } - else - { - osg::Node* node = dynamic_cast(object); - if (node) - { - node->setStateSet(ss); - } - } + osg::Node* node = dynamic_cast(object); + if (node) node->setStateSet(ss); } diff --git a/src/osgGA/StateSetManipulator.cpp b/src/osgGA/StateSetManipulator.cpp index 3bf3dfa58..a3553776a 100644 --- a/src/osgGA/StateSetManipulator.cpp +++ b/src/osgGA/StateSetManipulator.cpp @@ -72,14 +72,8 @@ void StateSetManipulator::clone() itr != parents.end(); ++itr) { - osg::Object* object = *itr; - osg::Node* node = dynamic_cast(object); - if (node) node->setStateSet(newStateSet.get()); - else - { - osg::Drawable* drawable = dynamic_cast(object); - if (drawable) drawable->setStateSet(newStateSet.get()); - } + osg::Node* node = *itr; + node->setStateSet(newStateSet.get()); } _stateset = newStateSet; diff --git a/src/osgUtil/Optimizer.cpp b/src/osgUtil/Optimizer.cpp index 549184ccf..e089fcc52 100644 --- a/src/osgUtil/Optimizer.cpp +++ b/src/osgUtil/Optimizer.cpp @@ -438,9 +438,9 @@ void Optimizer::StateVisitor::reset() _statesets.clear(); } -void Optimizer::StateVisitor::addStateSet(osg::StateSet* stateset,osg::Object* obj) +void Optimizer::StateVisitor::addStateSet(osg::StateSet* stateset, osg::Node* node) { - _statesets[stateset].insert(obj); + _statesets[stateset].insert(node); } void Optimizer::StateVisitor::apply(osg::Node& node) @@ -688,26 +688,13 @@ void Optimizer::StateVisitor::optimize() if (**current==**first_unique) { OSG_INFO << " found duplicate "<<(*current)->className()<<" first="<<*first_unique<<" current="<<*current<< std::endl; - ObjectSet& objSet = _statesets[*current]; - for(ObjectSet::iterator sitr=objSet.begin(); - sitr!=objSet.end(); + NodeSet& nodeSet = _statesets[*current]; + for(NodeSet::iterator sitr=nodeSet.begin(); + sitr!=nodeSet.end(); ++sitr) { OSG_INFO << " replace duplicate "<<*current<<" with "<<*first_unique<< std::endl; - osg::Object* obj = *sitr; - osg::Drawable* drawable = dynamic_cast(obj); - if (drawable) - { - drawable->setStateSet(*first_unique); - } - else - { - osg::Node* node = dynamic_cast(obj); - if (node) - { - node->setStateSet(*first_unique); - } - } + (*sitr)->setStateSet(*first_unique); } } else first_unique = current;