]> git.mxchange.org Git - flightgear.git/blobdiff - src/Main/renderer.cxx
Boris Koenig:
[flightgear.git] / src / Main / renderer.cxx
index fa780f36cd44778dae95d3c2a6c8f7cd43a5ee56..22dca5d6aefe0104ebd153435985550da51bfb62 100644 (file)
@@ -45,6 +45,9 @@
 #include <simgear/math/sg_random.h>
 #include <simgear/scene/model/modellib.hxx>
 #include <simgear/scene/model/model.hxx>
+#ifdef FG_JPEG_SERVER
+#include <simgear/screen/jpgfactory.hxx>
+#endif
 
 #ifdef FG_USE_CLOUDS_3D
 #  include <simgear/scene/sky/clouds3d/SkySceneLoader.hpp>
@@ -121,6 +124,20 @@ ssgSimpleState *default_state;
 ssgSimpleState *hud_and_panel;
 ssgSimpleState *menus;
 
+FGRenderer::FGRenderer()
+{
+#ifdef FG_JPEG_SERVER
+   jpgRenderFrame = FGRenderer::update;
+#endif
+}
+
+FGRenderer::~FGRenderer()
+{
+#ifdef FG_JPEG_SERVER
+   jpgRenderFrame = NULL;
+#endif
+}
+
 
 void
 FGRenderer::build_states( void ) {
@@ -792,141 +809,4 @@ FGRenderer::resize( int width, int height ) {
 }
 
 
-// For HiRes screen Dumps using Brian Pauls TR Library
-//
-// Curt writes: Unfortunately, if the jpeg image server code is
-// compiled into simgear and flightgear, this function get's called
-// from simgear which is not the direction we want our dependencies to
-// go, but it's the way things are right now.
-//
-// If I had to guess, I would speculate that this code probably
-// doesn't work, at least not 100% correctly, but I don't have time
-// right now to sort this one out.  Also the jpeg server was very
-// experimental and was extremely limited in the resolution images it
-// could serve out for some never debugged reason.  It's a novel
-// feature, but I wouldn't be entirely opposed to seeing it go away
-// unless someone wants to fix it so it works right and robustly and
-// can serve full resolution images without crashing ourselves.
-
-void trRenderFrame( void ) {
-#ifdef FG_ENABLE_MULTIPASS_CLOUDS
-    bool multi_pass_clouds = fgGetBool("/sim/rendering/multi-pass-clouds") &&
-                            !SGCloudLayer::enable_bump_mapping; // ugly artefact now
-#else
-    bool multi_pass_clouds = false;
-#endif
-    bool draw_clouds = fgGetBool("/environment/clouds/status");
-
-    if ( fgPanelVisible() ) {
-        GLfloat height = fgGetInt("/sim/startup/ysize");
-        GLfloat view_h =
-            (globals->get_current_panel()->getViewHeight() - globals->get_current_panel()->getYOffset())
-            * (height / 768.0) + 1;
-        glTranslatef( 0.0, view_h, 0.0 );
-    }
-
-    static GLfloat black[4] = { 0.0, 0.0, 0.0, 1.0 };
-    static GLfloat white[4] = { 1.0, 1.0, 1.0, 1.0 };
-
-    FGLight *l = (FGLight *)(globals->get_subsystem("lighting"));
-
-    glClearColor(l->adj_fog_color()[0], l->adj_fog_color()[1], 
-                 l->adj_fog_color()[2], l->adj_fog_color()[3]);
-
-    glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
-
-    // set the opengl state to known default values
-    default_state->force();
-
-    glEnable( GL_FOG );
-    glFogf  ( GL_FOG_DENSITY, fog_exp2_density);
-    glFogi  ( GL_FOG_MODE,    GL_EXP2 );
-    glFogfv ( GL_FOG_COLOR,   l->adj_fog_color() );
-
-    // GL_LIGHT_MODEL_AMBIENT has a default non-zero value so if
-    // we only update GL_AMBIENT for our lights we will never get
-    // a completely dark scene.  So, we set GL_LIGHT_MODEL_AMBIENT
-    // explicitely to black.
-    glLightModelfv( GL_LIGHT_MODEL_AMBIENT, black );
-    glLightModeli( GL_LIGHT_MODEL_LOCAL_VIEWER, GL_FALSE );
-
-    ssgGetLight( 0 ) -> setColour( GL_AMBIENT, l->scene_ambient() );
-
-    // texture parameters
-    glTexEnvi( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE ) ;
-    glHint( GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST ) ;
-
-    // we need a white diffuse light for the phase of the moon
-    ssgGetLight( 0 ) -> setColour( GL_DIFFUSE, white );
-    thesky->preDraw( cur_fdm_state->get_Altitude() * SG_FEET_TO_METER,
-                     fog_exp2_density );
-
-    // draw the ssg scene
-    // return to the desired diffuse color
-    ssgGetLight( 0 ) -> setColour( GL_DIFFUSE, l->scene_diffuse() );
-    glEnable( GL_DEPTH_TEST );
-    ssgSetNearFar( scene_nearplane, scene_farplane );
-    if ( draw_clouds ) {
-        // Draw the terrain
-        FGTileMgr::set_tile_filter( true );
-        sgSetModelFilter( false );
-        globals->get_aircraft_model()->select( false );
-        ssgCullAndDraw( globals->get_scenery()->get_scene_graph() );
-        // Disable depth buffer update, draw the clouds
-        glDepthMask( GL_FALSE );
-        thesky->drawUpperClouds();
-        if ( multi_pass_clouds ) {
-            thesky->drawLowerClouds();
-        }
-        glDepthMask( GL_TRUE );
-        if ( multi_pass_clouds ) {
-            // Draw the objects except the aircraft
-            //  and update the stencil buffer with 1
-            glEnable( GL_STENCIL_TEST );
-            glStencilFunc( GL_ALWAYS, 1, 1 );
-            glStencilOp( GL_KEEP, GL_KEEP, GL_REPLACE );
-        }
-        FGTileMgr::set_tile_filter( false );
-        sgSetModelFilter( true );
-        ssgCullAndDraw( globals->get_scenery()->get_scene_graph() );
-    } else {
-        FGTileMgr::set_tile_filter( true );
-        sgSetModelFilter( true );
-        globals->get_aircraft_model()->select( false );
-        ssgCullAndDraw( globals->get_scenery()->get_scene_graph() );
-    }
-
-    // draw the lights
-    glFogf (GL_FOG_DENSITY, rwy_exp2_punch_through);
-    ssgSetNearFar( scene_nearplane, scene_farplane );
-    ssgCullAndDraw( globals->get_scenery()->get_vasi_lights_root() );
-    ssgCullAndDraw( globals->get_scenery()->get_rwy_lights_root() );
-
-    ssgCullAndDraw( globals->get_scenery()->get_gnd_lights_root() );
-
-    if ( draw_clouds ) {
-        if ( multi_pass_clouds ) {
-            // Disable depth buffer update, draw the clouds where the
-            //  objects overwrite the already drawn clouds, by testing
-            //  the stencil buffer against 1
-            glDepthMask( GL_FALSE );
-            glStencilFunc( GL_EQUAL, 1, 1 );
-            glStencilOp( GL_KEEP, GL_KEEP, GL_KEEP );
-            thesky->drawUpperClouds();
-            thesky->drawLowerClouds();
-            glDepthMask( GL_TRUE );
-            glDisable( GL_STENCIL_TEST );
-        } else {
-            glDepthMask( GL_FALSE );
-            thesky->drawLowerClouds();
-            glDepthMask( GL_TRUE );
-        }
-    }
-
-    globals->get_aircraft_model()->select( true );
-    globals->get_model_mgr()->draw();
-    globals->get_aircraft_model()->draw();
-}
-
-
 // end of renderer.cxx