]> git.mxchange.org Git - flightgear.git/blobdiff - src/Scenery/tilemgr.cxx
toggle fullscreen: also adapt GUI plane when resizing
[flightgear.git] / src / Scenery / tilemgr.cxx
index 3471316556189dcf2caba00900698977dc2d9258..4594cecd51bf86267a0aeb1e45fc4f03bca02d79 100644 (file)
@@ -40,8 +40,8 @@
 
 #include <Main/globals.hxx>
 #include <Main/fg_props.hxx>
-#include <Main/renderer.hxx>
-#include <Main/viewer.hxx>
+#include <Viewer/renderer.hxx>
+#include <Viewer/splash.hxx>
 #include <Scripting/NasalSys.hxx>
 
 #include "scenery.hxx"
@@ -61,6 +61,8 @@ FGTileMgr::FGTileMgr():
     _visibilityMeters(fgGetNode("/environment/visibility-m", true)),
     _maxTileRangeM(fgGetNode("/sim/rendering/static-lod/bare", true)),
     _disableNasalHooks(fgGetNode("/sim/temp/disable-scenery-nasal", true)),
+    _scenery_loaded(fgGetNode("/sim/sceneryloaded", true)),
+    _scenery_override(fgGetNode("/sim/sceneryloaded-override", true)),
     _pager(FGScenery::getPagerSingleton())
 {
 }
@@ -108,6 +110,9 @@ void FGTileMgr::reinit()
         return;
     fgSetBool("/sim/sceneryloaded",false);
     fgSetDouble("/sim/startup/splash-alpha", 1.0);
+    
+    // Reload the materials definitions
+    _options->setMaterialLib(globals->get_matlib());
 
     // remove all old scenery nodes from scenegraph and clear cache
     osg::Group* group = globals->get_scenery()->get_terrain_branch();
@@ -308,22 +313,38 @@ void FGTileMgr::update_queues()
 // disk.
 void FGTileMgr::update(double)
 {
-    SGVec3d viewPos = globals->get_current_view()->get_view_pos();
     double vis = _visibilityMeters->getDoubleValue();
-    schedule_tiles_at(SGGeod::fromCart(viewPos), vis);
+    schedule_tiles_at(globals->get_view_position(), vis);
 
     update_queues();
+
+    // scenery loading check, triggers after each sim (tile manager) reinit
+    if (!_scenery_loaded->getBoolValue())
+    {
+        bool fdmInited = fgGetBool("sim/fdm-initialized");
+        if (_scenery_override->getBoolValue() || (isSceneryLoaded() && fdmInited))
+        {
+            _scenery_loaded->setBoolValue(true);
+            fgSplashProgress("");
+        }
+        else
+        {
+            fgSplashProgress("loading-scenery");
+            // be nice to loader threads while waiting for initial scenery, reduce to 20fps
+            SGTimeStamp::sleepForMSec(50);
+        }
+    }
 }
 
-// schedule tiles for the viewer bucket (FDM/AI/groundcache/... use
-// "schedule_scenery" instead
-int FGTileMgr::schedule_tiles_at(const SGGeod& location, double range_m)
+// schedule tiles for the viewer bucket
+// (FDM/AI/groundcache/... should use "schedule_scenery" instead)
+void FGTileMgr::schedule_tiles_at(const SGGeod& location, double range_m)
 {
     longitude = location.getLongitudeDeg();
     latitude = location.getLatitudeDeg();
 
     // SG_LOG( SG_TERRAIN, SG_DEBUG, "FGTileMgr::update() for "
-    //         << longitude << " " << latatitude );
+    //         << longitude << " " << latitude );
 
     current_bucket.set_bucket( location );
 
@@ -361,8 +382,6 @@ int FGTileMgr::schedule_tiles_at(const SGGeod& location, double range_m)
         previous_bucket.make_bad();
     }
     last_state = state;
-
-    return 1;
 }
 
 /** Schedules scenery for given position. Load request remains valid for given duration