From 8cd7d3698239a1b70db82a2a513ce680326437fe Mon Sep 17 00:00:00 2001 From: Robert Osfield Date: Thu, 12 Mar 2009 17:51:52 +0000 Subject: [PATCH] From Konstantin Sinitsyn, "At this moment, I just introducing to OSG. When I reviewing optimizer code, I find a mistake in Optimizer::RemoveLoadedProxyNodesVisitor, as it seems. This optimizer removes proxy nodes that fully loaded and in some cases attach their childs to parrents directly (without creating of group). I dont understand how this works, because if proxy node doesn't have any attributes such as name, description, node mask and any callbacks, then new group does not created to hold proxy node childs. And code below trying to attach their children to all parents but seems like only first child beeing attached to all parents correctly." Merged from svn/trunk using: svn merge -r 9919:9920 http://www.openscenegraph.org/svn/osg/OpenSceneGraph/trunk/src/osgUtil/Optimizer.cpp --- src/osgUtil/Optimizer.cpp | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/osgUtil/Optimizer.cpp b/src/osgUtil/Optimizer.cpp index 15c2faf97..64f94b2e6 100644 --- a/src/osgUtil/Optimizer.cpp +++ b/src/osgUtil/Optimizer.cpp @@ -1494,14 +1494,15 @@ void Optimizer::RemoveLoadedProxyNodesVisitor::removeRedundantNodes() // take a copy of parents list since subsequent removes will modify the original one. osg::Node::ParentList parents = group->getParents(); - for(unsigned int i=0;igetNumChildren();++i) + for(osg::Node::ParentList::iterator pitr=parents.begin(); + pitr!=parents.end(); + ++pitr) { - osg::Node* child = group->getChild(i); - for(osg::Node::ParentList::iterator pitr=parents.begin(); - pitr!=parents.end(); - ++pitr) + (*pitr)->removeChild(group.get()); + for(unsigned int i=0;igetNumChildren();++i) { - (*pitr)->replaceChild(group.get(),child); + osg::Node* child = group->getChild(i); + (*pitr)->addChild(child); } }