#include <simgear/magvar/magvar.hxx>
#include <simgear/math/sg_random.h>
#include <simgear/io/raw_socket.hxx>
+#include <simgear/scene/tsync/terrasync.hxx>
#include <simgear/misc/sg_sleep.hxx>
#include <Time/light.hxx>
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");
- SG_LOG( SG_ALL, SG_DEBUG, "Running Main Loop");
- SG_LOG( SG_ALL, SG_DEBUG, "======= ==== ====");
+ SG_LOG( SG_GENERAL, SG_DEBUG, "Running Main Loop");
+ SG_LOG( SG_GENERAL, SG_DEBUG, "======= ==== ====");
// update "time"
if (globals->get_tile_mgr()->isSceneryLoaded()
&& fgGetBool("sim/fdm-initialized")) {
fgSetBool("sim/sceneryloaded",true);
+ fgSplashProgress("");
if (fgGetBool("/sim/sound/working")) {
globals->get_soundmgr()->activate();
}
}
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, "" );
+ SG_LOG( SG_GENERAL, SG_DEBUG, "" );
}
void fgInitSoundManager()
}
// 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
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++;
////////////////////////////////////////////////////////////////////
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.
////////////////////////////////////////////////////////////////////
+ simgear::SGTerraSync* terra_sync = new simgear::SGTerraSync(globals->get_props());
+ globals->add_subsystem("terrasync", terra_sync);
globals->set_scenery( new FGScenery );
globals->get_scenery()->init();
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++;
// 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
// runway selection as for AI traffic. However, this code belongs to
// somewhere(?) else - if I only new where...
if( true == fgGetBool( "/environment/metar/valid" ) ) {
+ SG_LOG(SG_ENVIRONMENT, SG_INFO,
+ "Using METAR for runway selection: '" << fgGetString("/environment/metar/data") << "'" );
// the realwx_ctrl fetches metar in the foreground on init,
// If it was able to fetch a metar or one was given on the commandline,
// the valid flag is set here, otherwise it is false
extern bool fgSetPosFromAirportIDandHdg( const string& id, double tgt_hdg );
fgSetPosFromAirportIDandHdg( apt, hdg );
}
+ } else {
+ SG_LOG(SG_ENVIRONMENT, SG_INFO,
+ "No METAR available to pick active runway" );
}
- 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);
}
}
-
static void upper_case_property(const char *name)
{
using namespace simgear;
fgInitFGRoot(argc, argv);
// Check for the correct base package version
- static char required_version[] = "2.0.0";
+ static char required_version[] = "2.5.0";
string base_version = fgBasePackageVersion();
if ( !(base_version == required_version) ) {
// tell the operator how to use this application
SG_LOG( SG_GENERAL, SG_ALERT, "" ); // To popup the console on windows
- cerr << endl << "Base package check failed ... " \
- << "Found version " << base_version << " at: " \
- << globals->get_fg_root() << endl;
- cerr << "Please upgrade to version: " << required_version << endl;
+ cerr << endl << "Base package check failed:" << endl \
+ << " Version " << base_version << " found at: " \
+ << globals->get_fg_root() << endl \
+ << " Version " << required_version << " is required." << endl \
+ << "Please upgrade/downgrade base package and set the path to your fgdata" << endl \
+ << "with --fg-root=path_to_your_fgdata" << endl;
#ifdef _MSC_VER
cerr << "Hit a key to continue..." << endl;
cin.get();
fgOSInit(&argc, argv);
_bootstrap_OSInit++;
- fgRegisterWindowResizeHandler( &FGRenderer::resize );
fgRegisterIdleHandler( &fgIdleFunction );
- fgRegisterDrawHandler( &FGRenderer::update );
// Initialize sockets (WinSock needs this)
simgear::Socket::initSockets();
return result;
}
-
-