]> git.mxchange.org Git - simgear.git/blobdiff - simgear/scene/model/model.cxx
simgear/scene/sky/sky.cxx: Include sg_inlines.h with simgear/ prefix as all other...
[simgear.git] / simgear / scene / model / model.cxx
index 1ea486f0d13afc5b1dae4353c449539f77df3d85..648b670aaf7ee4ad3032b0fb8989464f52d20027 100644 (file)
@@ -264,7 +264,7 @@ void MakeEffectVisitor::apply(osg::Geode& geode)
     makeParametersFromStateSet(ssRoot, ss);
     SGPropertyNode_ptr effectRoot = new SGPropertyNode;
     effect::mergePropertyTrees(effectRoot, ssRoot, _currentEffectParent);
-    Effect* effect = makeEffect(effectRoot, true, _options);
+    Effect* effect = makeEffect(effectRoot, true, _options.get());
     EffectGeode* eg = dynamic_cast<EffectGeode*>(&geode);
     if (eg) {
         eg->setEffect(effect);
@@ -274,8 +274,14 @@ void MakeEffectVisitor::apply(osg::Geode& geode)
         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));
+        for (unsigned i = 0; i < geode.getNumDrawables(); ++i) {
+            osg::Drawable *drawable = geode.getDrawable(i);
+            eg->addDrawable(drawable);
+
+            // Generate tangent vectors etc if needed
+            osg::Geometry *geom = dynamic_cast<osg::Geometry*>(drawable);
+            if(geom) eg->runGenerators(geom);
+        }
     }
     pushResultNode(&geode, eg);