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
This commit is contained in:
Robert Osfield
2015-04-07 15:49:06 +00:00
parent 814693ffc1
commit 6cff8650f2
4 changed files with 13 additions and 43 deletions

View File

@@ -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<osg::Drawable*>(obj);
if (drawable)
{
drawable->setStateSet(*first_unique);
}
else
{
osg::Node* node = dynamic_cast<osg::Node*>(obj);
if (node)
{
node->setStateSet(*first_unique);
}
}
(*sitr)->setStateSet(*first_unique);
}
}
else first_unique = current;