]> git.mxchange.org Git - flightgear.git/blobdiff - src/Main/main.cxx
Expose FGPositioned data via property tree, and make comm-stations a real FGPositione...
[flightgear.git] / src / Main / main.cxx
index 677d0f36bca67f2871048d0ae0289eddf98f9ee8..59737e5fac3a90199d98c502b4f1f9942a43f5cc 100644 (file)
@@ -121,6 +121,15 @@ static void fgMainLoop( void ) {
     static SGPropertyNode_ptr frame_signal
         = fgGetNode("/sim/signals/frame", true);
 
+    static SGPropertyNode_ptr _statisticsFlag
+        = fgGetNode("/sim/timing-statistics/enabled", true);
+    static SGPropertyNode_ptr _statisticsInterval
+        = fgGetNode("/sim/timing-statistics/interval-s", true);
+    static SGPropertyNode_ptr _statiticsMinJitter
+        = fgGetNode("/sim/timing-statistics/min-jitter-ms", true);
+    static SGPropertyNode_ptr _statiticsMinTime
+        = fgGetNode("/sim/timing-statistics/min-time-ms", true);
+
     frame_signal->fireValueChanged();
     SGCloudLayer::enable_bump_mapping = fgGetBool("/sim/rendering/bump-mapping");
     
@@ -194,6 +203,7 @@ static void fgMainLoop( void ) {
         if (globals->get_tile_mgr()->isSceneryLoaded()
              && fgGetBool("sim/fdm-initialized")) {
             fgSetBool("sim/sceneryloaded",true);
+            fgSplashProgress("");
             if (fgGetBool("/sim/sound/working")) {
                 globals->get_soundmgr()->activate();
             }
@@ -202,10 +212,33 @@ static void fgMainLoop( void ) {
         }
         else
         {
+            fgSplashProgress("loading scenery");
             // be nice to loader threads while waiting for initial scenery, reduce to 2fps
             simgear::sleepForMSec(500);
         }
     }
+
+    // print timing statistics
+    static bool _lastStatisticsFlag = false;
+    if (_lastStatisticsFlag != _statisticsFlag->getBoolValue())
+    {
+        // flag has changed, update subsystem manager
+        _lastStatisticsFlag = _statisticsFlag->getBoolValue();
+        globals->get_subsystem_mgr()->collectDebugTiming(_lastStatisticsFlag);
+    }
+    if (_lastStatisticsFlag)
+    {
+        static double elapsed = 0;
+        elapsed += real_dt;
+        if (elapsed >= _statisticsInterval->getDoubleValue())
+        {
+            // print and reset timing statistics
+            globals->get_subsystem_mgr()->printTimingStatistics(_statiticsMinTime->getDoubleValue(),
+                                                                _statiticsMinJitter->getDoubleValue());
+            elapsed = 0;
+        }
+    }
+
     simgear::AtomicChangeListener::fireChangeListeners();
 
     SG_LOG( SG_ALL, SG_DEBUG, "" );
@@ -282,7 +315,7 @@ SGPath resolve_path(const std::string& s)
 }
 
 // This is the top level master main function that is registered as
-// our idle funciton
+// our idle function
 
 // The first few passes take care of initialization things (a couple
 // per pass) and once everything has been initialized fgMainLoop from
@@ -316,20 +349,17 @@ static void fgIdleFunction ( void ) {
         if (!guiFinishInit())
             return;
         idle_state++;
-        fgSplashProgress("reading aircraft list");
-
+        fgSplashProgress("loading aircraft list");
 
     } else if ( idle_state == 2 ) {
         idle_state++;
-                
-        fgSplashProgress("reading airport & navigation data");
-
+        fgSplashProgress("loading navigation data");
 
     } else if ( idle_state == 3 ) {
         idle_state++;
         fgInitNav();
-        fgSplashProgress("setting up scenery");
 
+        fgSplashProgress("initializing scenery system");
 
     } else if ( idle_state == 4 ) {
         idle_state++;
@@ -354,15 +384,13 @@ static void fgIdleFunction ( void ) {
         ////////////////////////////////////////////////////////////////////
         fgInitCommands();
 
-
         ////////////////////////////////////////////////////////////////////
         // Initialize the material manager
         ////////////////////////////////////////////////////////////////////
         globals->set_matlib( new SGMaterialLib );
-        simgear::SGModelLib::init(globals->get_fg_root());
-        simgear::SGModelLib::setPropRoot(globals->get_props());
+        simgear::SGModelLib::init(globals->get_fg_root(), globals->get_props());
         simgear::SGModelLib::setPanelFunc(load_panel);
-        
+
         ////////////////////////////////////////////////////////////////////
         // Initialize the TG scenery subsystem.
         ////////////////////////////////////////////////////////////////////
@@ -371,15 +399,12 @@ static void fgIdleFunction ( void ) {
         globals->get_scenery()->bind();
         globals->set_tile_mgr( new FGTileMgr );
 
-
         fgSplashProgress("loading aircraft");
 
-
     } else if ( idle_state == 5 ) {
         idle_state++;
 
-        fgSplashProgress("generating sky elements");
-
+        fgSplashProgress("initializing sky elements");
 
     } else if ( idle_state == 6 ) {
         idle_state++;
@@ -440,10 +465,8 @@ static void fgIdleFunction ( void ) {
         // airport->setName( "Airport Lighting" );
         // lighting->addKid( airport );
 
-        // build our custom render states
         fgSplashProgress("initializing subsystems");
 
-
     } else if ( idle_state == 7 ) {
         idle_state++;
         // Initialize audio support
@@ -500,18 +523,18 @@ static void fgIdleFunction ( void ) {
                 fgSetPosFromAirportIDandHdg( apt, hdg );
             }
         }
-        fgSplashProgress("setting up time & renderer");
+
+        fgSplashProgress("initializing graphics engine");
 
     } else if ( idle_state == 8 ) {
         idle_state = 1000;
         
         // setup OpenGL view parameters
-        globals->get_renderer()->init();
+        globals->get_renderer()->setupView();
 
         globals->get_renderer()->resize( fgGetInt("/sim/startup/xsize"),
                                          fgGetInt("/sim/startup/ysize") );
 
-        fgSplashProgress("loading scenery objects");
         int session = fgGetInt("/sim/session",0);
         session++;
         fgSetInt("/sim/session",session);
@@ -525,6 +548,10 @@ static void fgIdleFunction ( void ) {
     }
 }
 
+static void fgWinResizeFunction(int width, int height)
+{
+    globals->get_renderer()->resize(width, height);
+}
 
 static void upper_case_property(const char *name)
 {
@@ -614,7 +641,7 @@ int fgMainInit( int argc, char **argv ) {
     fgOSInit(&argc, argv);
     _bootstrap_OSInit++;
 
-    fgRegisterWindowResizeHandler( &FGRenderer::resize );
+    fgRegisterWindowResizeHandler( &fgWinResizeFunction );
     fgRegisterIdleHandler( &fgIdleFunction );
     fgRegisterDrawHandler( &FGRenderer::update );
 
@@ -638,5 +665,3 @@ int fgMainInit( int argc, char **argv ) {
     
     return result;
 }
-
-