]> git.mxchange.org Git - simgear.git/blobdiff - simgear/scene/model/model.cxx
Merge branch 'timoore/mat-effect'
[simgear.git] / simgear / scene / model / model.cxx
index 1485173f0c86d22d95973fab9e6ba0eeb8efe565..59f33694956d600a31858e939f93bae7fd17a568 100644 (file)
@@ -18,6 +18,7 @@
 #include <osgDB/ReadFile>
 #include <osgDB/SharedStateManager>
 
+#include <simgear/math/SGMath.hxx>
 #include <simgear/scene/material/Effect.hxx>
 #include <simgear/scene/material/EffectGeode.hxx>
 #include <simgear/scene/util/SGSceneFeatures.hxx>
@@ -241,6 +242,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 +270,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));
     }