When instantiating effects, copy user data of any created nodes.

This bug was the cause of the huge memory consumption / death reported at some places:
the BVH data on "raw" .ac models (random objects) was dropped on the floor.
This commit is contained in:
Tim Moore
2009-11-15 23:51:08 +01:00
parent bb2a02daa8
commit 0a2264cad4

View File

@@ -241,6 +241,10 @@ void MakeEffectVisitor::apply(osg::Group& node)
}
}
SplicingVisitor::apply(node);
// If a new node was created, copy the user data too.
ref_ptr<SGSceneUserData> userData = SGSceneUserData::getSceneUserData(&node);
if (userData.valid() && _childStack.back().back().get() != &node)
_childStack.back().back()->setUserData(new SGSceneUserData(*userData));
if (restoreEffect)
_currentEffectParent = savedEffectRoot;
}
@@ -265,6 +269,9 @@ void MakeEffectVisitor::apply(osg::Geode& geode)
} else {
eg = new EffectGeode;
eg->setEffect(effect);
ref_ptr<SGSceneUserData> userData = SGSceneUserData::getSceneUserData(&geode);
if (userData.valid())
eg->setUserData(new SGSceneUserData(*userData));
for (int i = 0; i < geode.getNumDrawables(); ++i)
eg->addDrawable(geode.getDrawable(i));
}