]> git.mxchange.org Git - flightgear.git/blobdiff - src/Main/main.cxx
Move the texture loader to SimGear
[flightgear.git] / src / Main / main.cxx
index bb12dcf6d2ed9d9703500618be13358e0f2640c4..048fb35687edb73fa903f75052890397324f806a 100644 (file)
@@ -95,6 +95,7 @@ SG_USING_STD(endl);
 
 #include <Autopilot/newauto.hxx>
 
+#include <Cockpit/hud.hxx>
 #include <Cockpit/cockpit.hxx>
 #include <Cockpit/radiostack.hxx>
 
@@ -214,9 +215,6 @@ FGGeneral general;
 static int idle_state = 0;
 static long global_multi_loop;
 
-// forward declaration
-void fgReshape( int width, int height );
-
 // fog constants.  I'm a little nervous about putting actual code out
 // here but it seems to work (?)
 static const double m_log01 = -log( 0.01 );
@@ -278,6 +276,7 @@ ssgSimpleState *menus;
 SGTimeStamp last_time_stamp;
 SGTimeStamp current_time_stamp;
 
+
 void fgBuildRenderStates( void ) {
     default_state = new ssgSimpleState;
     default_state->ref();
@@ -375,7 +374,7 @@ void trRenderFrame( void ) {
     if ( fgPanelVisible() ) {
         GLfloat height = fgGetInt("/sim/startup/ysize");
         GLfloat view_h =
-            (current_panel->getViewHeight() - current_panel->getYOffset())
+            (globals->get_current_panel()->getViewHeight() - globals->get_current_panel()->getYOffset())
             * (height / 768.0) + 1;
         glTranslatef( 0.0, view_h, 0.0 );
     }
@@ -712,7 +711,9 @@ void fgRenderFrame() {
         globals->get_multiplayer_rx_mgr()->Update();
 #endif
 
-       if ( fgGetBool("/sim/rendering/skyblend") ) {
+        if ( fgGetBool("/sim/rendering/skyblend") &&
+             fgGetBool("/sim/rendering/draw-otw") )
+        {
            // draw the sky backdrop
 
             // we need a white diffuse light for the phase of the moon
@@ -733,7 +734,9 @@ void fgRenderFrame() {
             // draw wire frame
             glPolygonMode( GL_FRONT_AND_BACK, GL_LINE );
         }
-       ssgCullAndDraw( globals->get_scenery()->get_scene_graph() );
+        if ( fgGetBool("/sim/rendering/draw-otw") ) {
+            ssgCullAndDraw( globals->get_scenery()->get_scene_graph() );
+        }
 
        // This is a bit kludgy.  Every 200 frames, do an extra
        // traversal of the scene graph without drawing anything, but
@@ -786,14 +789,18 @@ void fgRenderFrame() {
         glPolygonMode(GL_FRONT, GL_POINT);
 
         // draw runway lighting
-       ssgCullAndDraw( globals->get_scenery()->get_rwy_lights_root() );
+        if ( fgGetBool("/sim/rendering/draw-otw") ) {
+            ssgCullAndDraw( globals->get_scenery()->get_rwy_lights_root() );
+        }
 
         // change punch through and then draw taxi lighting
        glFogf ( GL_FOG_DENSITY, fog_exp2_density );
         // sgVec3 taxi_fog;
         // sgSetVec3( taxi_fog, 0.0, 0.0, 0.0 );
         // glFogfv ( GL_FOG_COLOR, taxi_fog );
-       ssgCullAndDraw( globals->get_scenery()->get_taxi_lights_root() );
+        if ( fgGetBool("/sim/rendering/draw-otw") ) {
+            ssgCullAndDraw( globals->get_scenery()->get_taxi_lights_root() );
+        }
 
         // clean up lighting
         glPolygonMode(GL_FRONT, GL_FILL);
@@ -824,17 +831,23 @@ void fgRenderFrame() {
 
         // draw ground lighting
        glFogf (GL_FOG_DENSITY, ground_exp2_punch_through);
-       ssgCullAndDraw( globals->get_scenery()->get_gnd_lights_root() );
+        if ( fgGetBool("/sim/rendering/draw-otw") ) {
+            ssgCullAndDraw( globals->get_scenery()->get_gnd_lights_root() );
+        }
 
        if ( fgGetBool("/sim/rendering/skyblend") ) {
            // draw the sky cloud layers
-            if (fgGetBool("/environment/clouds/status")) {
+            if ( fgGetBool("/environment/clouds/status") &&
+                 fgGetBool("/sim/rendering/draw-otw") )
+            {
                 thesky->postDraw( cur_fdm_state->get_Altitude()
                                   * SG_FEET_TO_METER );
             }
        }
 
-        if ( fgGetBool("/sim/rendering/clouds3d") ) {
+        if ( fgGetBool("/sim/rendering/clouds3d") &&
+             fgGetBool("/sim/rendering/draw-otw") )
+        {
             glDisable( GL_FOG );
             glDisable( GL_LIGHTING );
             // cout << "drawing new clouds" << endl;
@@ -860,8 +873,10 @@ void fgRenderFrame() {
             glBlendFunc ( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA ) ;
         }
 
-       globals->get_model_mgr()->draw();
-       globals->get_aircraft_model()->draw();
+        if ( fgGetBool("/sim/rendering/draw-otw") ) {
+            globals->get_model_mgr()->draw();
+            globals->get_aircraft_model()->draw();
+        }
 
        // display HUD && Panel
        glDisable( GL_FOG );
@@ -877,11 +892,12 @@ void fgRenderFrame() {
 
        // Use the hud_and_panel ssgSimpleState for rendering the ATC output
        // This only works properly if called before the panel call
-       globals->get_ATC_display()->update(delta_time_sec);
+       if((fgGetBool("/sim/ATC/enabled")) || (fgGetBool("/sim/ai-traffic/enabled")))
+           globals->get_ATC_display()->update(delta_time_sec);
 
        // update the panel subsystem
-       if ( current_panel != NULL ) {
-           current_panel->update(delta_time_sec);
+       if ( globals->get_current_panel() != NULL ) {
+           globals->get_current_panel()->update(delta_time_sec);
        }
         fgUpdate3DPanels();
 
@@ -1020,6 +1036,8 @@ static void fgMainLoop( void ) {
 
     SGTime *t = globals->get_time_params();
 
+    sglog().setLogLevels( SG_ALL, (sgDebugPriority)fgGetInt("/sim/log-level") );
+
     FGLocation * acmodel_location = 0;
     if(cur_fdm_state->getACModel() != 0) {
       acmodel_location = (FGLocation *)  cur_fdm_state->getACModel()->get3DModel()->getFGLocation();
@@ -1157,6 +1175,7 @@ static void fgMainLoop( void ) {
 #else
     if ( (t->get_cur_time() != last_time) && (last_time > 0) ) {
        general.set_frame_rate( frames );
+        fgSetInt("/sim/frame-rate", frames);
        SG_LOG( SG_ALL, SG_DEBUG, 
                "--> Frame rate is = " << general.get_frame_rate() );
        frames = 0;
@@ -1166,7 +1185,8 @@ static void fgMainLoop( void ) {
 #endif
 
     // Run ATC subsystem
-    globals->get_ATC_mgr()->update(delta_time_sec);
+    if (fgGetBool("/sim/ATC/enabled"))
+        globals->get_ATC_mgr()->update(delta_time_sec);
 
     // Run the AI subsystem
     if (fgGetBool("/sim/ai-traffic/enabled"))
@@ -1347,6 +1367,9 @@ static void fgIdleFunction ( void ) {
        // setup OpenGL view parameters
        fgInitVisuals();
 
+        // Read the list of available aircrafts
+        fgReadAircraft();
+
        idle_state++;
     } else if ( idle_state == 5 ) {
 
@@ -1379,8 +1402,8 @@ void fgReshape( int width, int height ) {
 
     if ( (!fgGetBool("/sim/virtual-cockpit"))
         && fgPanelVisible() && idle_state == 1000 ) {
-       view_h = (int)(height * (current_panel->getViewHeight() -
-                                current_panel->getYOffset()) / 768.0);
+       view_h = (int)(height * (globals->get_current_panel()->getViewHeight() -
+                                globals->get_current_panel()->getYOffset()) / 768.0);
     } else {
        view_h = height;
     }
@@ -1610,6 +1633,9 @@ static bool fgMainInit( int argc, char **argv ) {
     // fonts !!!
     guiInit();
 
+    // Read the list of available aircrafts
+    fgReadAircraft();
+
 #ifdef GL_EXT_texture_lod_bias
     glTexEnvf( GL_TEXTURE_FILTER_CONTROL_EXT, GL_TEXTURE_LOD_BIAS_EXT, -0.5 ) ;
 #endif