]> git.mxchange.org Git - flightgear.git/blobdiff - src/Scenery/tilemgr.cxx
#553: decouple OSG callbacks from Nasal subsystem
[flightgear.git] / src / Scenery / tilemgr.cxx
index 363ea858b7a16c1ccac9a3096f0589bfcf12eec6..4ebce444cabacd8aac80694a2264e70b42bb0ac2 100644 (file)
@@ -57,10 +57,12 @@ using simgear::TileCache;
 
 FGTileMgr::FGTileMgr():
     state( Start ),
+    last_state( Running ),
     vis( 16000 ),
-    _terra_sync(NULL)
+    _terra_sync(NULL),
+    _visibilityMeters(fgGetNode("/environment/visibility-m", true)),
+    _maxTileRangeM(fgGetNode("/sim/rendering/static-lod/bare", true))
 {
-    _maxTileRangeM = fgGetNode("/sim/rendering/static-lod/bare", true);
 }
 
 
@@ -88,8 +90,6 @@ void FGTileMgr::init() {
     std::copy(sc.begin(), sc.end(), back_inserter(fp));
 
     TileEntry::setModelLoadHelper(this);
-    
-    _visibilityMeters = fgGetNode("/environment/visibility-m", true);
 
     reinit();
 }
@@ -244,11 +244,13 @@ FGTileMgr::loadTileModel(const string& modelPath, bool cacheModel)
         if(cacheModel)
             result =
                 SGModelLib::loadModel(fullPath.str(), globals->get_props(),
-                                      new FGNasalModelData);
+                                      _disableNasalHooks->getBoolValue() ? NULL : new FGNasalModelDataProxy);
         else
+        {
             result=
                 SGModelLib::loadDeferredModel(fullPath.str(), globals->get_props(),
-                                             new FGNasalModelData);
+                                              _disableNasalHooks->getBoolValue() ? NULL : new FGNasalModelDataProxy);
+        }
     } catch (const sg_io_exception& exc) {
         string m(exc.getMessage());
         m += " ";
@@ -341,7 +343,6 @@ void FGTileMgr::update_queues()
 // disk.
 void FGTileMgr::update(double)
 {
-    SG_LOG( SG_TERRAIN, SG_DEBUG, "FGTileMgr::update()" );
     SGVec3d viewPos = globals->get_current_view()->get_view_pos();
     double vis = _visibilityMeters->getDoubleValue();
     schedule_tiles_at(SGGeod::fromCart(viewPos), vis);
@@ -373,7 +374,10 @@ int FGTileMgr::schedule_tiles_at(const SGGeod& location, double range_m)
     // do tile load scheduling.
     // Note that we need keep track of both viewer buckets and fdm buckets.
     if ( state == Running ) {
-        SG_LOG( SG_TERRAIN, SG_DEBUG, "State == Running" );
+        if (last_state != state)
+        {
+            SG_LOG( SG_TERRAIN, SG_DEBUG, "State == Running" );
+        }
         if (current_bucket != previous_bucket) {
             // We've moved to a new bucket, we need to schedule any
             // needed tiles for loading.
@@ -386,11 +390,12 @@ int FGTileMgr::schedule_tiles_at(const SGGeod& location, double range_m)
         // save bucket
         previous_bucket = current_bucket;
     } else if ( state == Start || state == Inited ) {
-        SG_LOG( SG_TERRAIN, SG_INFO, "State == Start || Inited" );
+        SG_LOG( SG_TERRAIN, SG_DEBUG, "State == Start || Inited" );
         // do not update bucket yet (position not valid in initial loop)
         state = Running;
         previous_bucket.make_bad();
     }
+    last_state = state;
 
     return 1;
 }