]> git.mxchange.org Git - flightgear.git/commitdiff
Prevention of the creation of multiple OSG scene graph roots.
authorEdward d'Auvergne <edward@nmr-relax.com>
Tue, 3 May 2016 13:14:53 +0000 (15:14 +0200)
committerRoland Haeder <roland@mxchange.org>
Thu, 22 Sep 2016 21:27:34 +0000 (23:27 +0200)
As the scenery manager's init() function is called twice on start up, two OSG
scene graph roots would be created.  A number of scene graph branches would be
initalised on the first root, but then be lost as the second is created.  This
fixes the precipitation branch, for example.

src/Scenery/scenery.cxx
src/Scenery/scenery.hxx

index 9b9df333fe957da80eff7f85f10a1a48b697c64d..48334337eeafc3216a85e1d032de8b2d0df3c8c7 100644 (file)
@@ -286,6 +286,9 @@ FGScenery::FGScenery() :
 {
     // keep reference to pager singleton, so it cannot be destroyed while FGScenery lives
     _pager = FGScenery::getPagerSingleton();
+
+    // Initialise the state of the scene graph.
+    _inited = false;
 }
 
 FGScenery::~FGScenery()
@@ -296,6 +299,10 @@ FGScenery::~FGScenery()
 
 // Initialize the Scenery Management system
 void FGScenery::init() {
+    // Already set up.
+    if (_inited)
+        return;
+
     // Scene graph root
     scene_graph = new osg::Switch;
     scene_graph->setName( "FGScenery" );
@@ -334,6 +341,9 @@ void FGScenery::init() {
     simgear::GlobalParticleCallback::setSwitch(fgGetNode("/sim/rendering/particles", true));
   
     _listener = new ScenerySwitchListener(this);
+
+    // Toggle the setup flag.
+    _inited = true;
 }
 
 void FGScenery::shutdown()
@@ -343,6 +353,9 @@ void FGScenery::shutdown()
     models_branch = NULL;
     aircraft_branch = NULL;
     particles_branch = NULL;
+
+    // Toggle the setup flag.
+    _inited = false;
 }
 
 
index 593707d145b02495bca4c686c695b87308d5f135..55176ca55961a5cff351b60ae80a04c6b851a178 100644 (file)
@@ -131,6 +131,10 @@ public:
     flightgear::SceneryPager* getPager() { return _pager.get(); }
 
     static const char* subsystemName() { return "scenery"; }
+
+private:
+    // The state of the scene graph.
+    bool _inited;
 };