]> git.mxchange.org Git - flightgear.git/commitdiff
defer occluder registration until the shadows subsytem is initialized.
authormfranz <mfranz>
Wed, 12 Apr 2006 22:21:02 +0000 (22:21 +0000)
committermfranz <mfranz>
Wed, 12 Apr 2006 22:21:02 +0000 (22:21 +0000)
That way models that are loaded early during startup get their shadows, too.

src/Model/modelmgr.cxx
src/Model/modelmgr.hxx

index 4359a70b5037740900ad531935c227f1b81547da..7be7e4e474568de031087410fe37a25047dc6b31 100644 (file)
@@ -32,7 +32,6 @@ extern SGShadowVolume *shadows;
 FGModelMgr::FGModelMgr ()
   : _models(fgGetNode("/models", true)),
     _listener(new Listener(this))
-
 {
   _models->addChangeListener(_listener);
 }
@@ -81,8 +80,6 @@ FGModelMgr::add_model (SGPropertyNode * node)
       globals->get_sim_time_sec(), /*cache_object=*/false);
 
   model->init( object );
-  if (shadows)
-      shadows->addOccluder((ssgBranch *)object, SGShadowVolume::occluderTypeTileObject);
 
                                // Set position and orientation either
                                // indirectly through property refs
@@ -168,6 +165,12 @@ FGModelMgr::update (double dt)
       model->setHeadingDeg(instance->heading_deg_node->getDoubleValue());
 
     instance->model->update();
+
+    if (shadows && !instance->shadow) {
+      ssgBranch *branch = (ssgBranch *)instance->model->getSceneGraph();
+      shadows->addOccluder(branch, SGShadowVolume::occluderTypeTileObject);
+      instance->shadow = true;
+    }
   }
 }
 
@@ -211,7 +214,8 @@ FGModelMgr::Instance::Instance ()
     elev_ft_node(0),
     roll_deg_node(0),
     pitch_deg_node(0),
-    heading_deg_node(0)
+    heading_deg_node(0),
+    shadow(false)
 {
 }
 
@@ -259,7 +263,7 @@ FGModelMgr::Listener::childRemoved(SGPropertyNode * parent, SGPropertyNode * chi
 
     _mgr->_instances.erase(it);
     ssgBranch *branch = (ssgBranch *)instance->model->getSceneGraph();
-    if (shadows)
+    if (shadows && instance->shadow)
         shadows->deleteOccluder(branch);
     globals->get_scenery()->get_scene_graph()->removeKid(branch);
 
index b1956e3f61f441df5908a10f50d9688a77f71a87..a2d2676453e9f8f83584c471d7709f120187e90e 100644 (file)
@@ -54,6 +54,7 @@ public:
     SGPropertyNode_ptr roll_deg_node;
     SGPropertyNode_ptr pitch_deg_node;
     SGPropertyNode_ptr heading_deg_node;
+    bool shadow;
   };
 
   FGModelMgr ();