From: ehofman Date: Sat, 3 Apr 2004 09:27:38 +0000 (+0000) Subject: Frederic Bouvier: X-Git-Url: https://git.mxchange.org/?a=commitdiff_plain;h=966e0bdd4dcabdb20b9c68863a3bd0533b80b189;p=flightgear.git Frederic Bouvier: I restored the output to cout / cerr for the options and the warning for the version mismatch. There is a dummy SG_LOG to allow the windows version to popup the console. The snapshot rendering use multipass now. --- diff --git a/src/Main/main.cxx b/src/Main/main.cxx index 16c578da3..bf586ccf6 100644 --- a/src/Main/main.cxx +++ b/src/Main/main.cxx @@ -257,6 +257,12 @@ void fgInitVisuals( void ) { // For HiRes screen Dumps using Brian Pauls TR Library void trRenderFrame( void ) { +#ifdef FG_ENABLE_MULTIPASS_CLOUDS + bool multi_pass_clouds = fgGetBool("/sim/rendering/multi-pass-clouds"); +#else + bool multi_pass_clouds = false; +#endif + bool draw_clouds = fgGetBool("/environment/clouds/status"); if ( fgPanelVisible() ) { GLfloat height = fgGetInt("/sim/startup/ysize"); @@ -301,14 +307,64 @@ void trRenderFrame( void ) { ssgGetLight( 0 ) -> setColour( GL_DIFFUSE, white ); thesky->preDraw( cur_fdm_state->get_Altitude() * SG_FEET_TO_METER, fog_exp2_density ); - thesky->drawUpperClouds(); // 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 ); - ssgCullAndDraw( globals->get_scenery()->get_scene_graph() ); + 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_REPLACE, GL_REPLACE, GL_REPLACE ); + } + FGTileMgr::set_tile_filter( false ); + sgSetModelFilter( true ); + ssgCullAndDraw( globals->get_scenery()->get_scene_graph() ); + 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 ); + } + + // Draw the aircraft + sgSetModelFilter( false ); + globals->get_aircraft_model()->select( true ); + ssgCullAndDraw( globals->get_scenery()->get_scene_graph() ); + FGTileMgr::set_tile_filter( true ); + sgSetModelFilter( true ); + } else { + FGTileMgr::set_tile_filter( true ); + sgSetModelFilter( true ); + globals->get_aircraft_model()->select( true ); + ssgCullAndDraw( globals->get_scenery()->get_scene_graph() ); + } // draw the lights glFogf (GL_FOG_DENSITY, rwy_exp2_punch_through); @@ -1431,12 +1487,13 @@ bool fgMainInit( int argc, char **argv ) { if ( !(base_version == required_version) ) { // tell the operator how to use this application - SG_LOG( SG_GENERAL, SG_ALERT, endl << "Base package check failed ... " \ + 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() ); - SG_LOG( SG_GENERAL, SG_ALERT, "Please upgrade to version: " << required_version ); + << globals->get_fg_root() << endl; + cerr << "Please upgrade to version: " << required_version << endl; #ifdef _MSC_VER - SG_LOG( SG_GENERAL, SG_ALERT, "Hit a key to continue..." ); + cerr << "Hit a key to continue..." << endl; cin.get(); #endif exit(-1); @@ -1472,6 +1529,7 @@ bool fgMainInit( int argc, char **argv ) { #endif // Clouds3D requires an alpha channel + // clouds may require stencil buffer fgOSOpenWindow( fgGetInt("/sim/startup/xsize"), fgGetInt("/sim/startup/ysize"), fgGetInt("/sim/rendering/bits-per-pixel"), diff --git a/src/Main/options.cxx b/src/Main/options.cxx index 2df1aaef8..6235939e0 100644 --- a/src/Main/options.cxx +++ b/src/Main/options.cxx @@ -1566,6 +1566,7 @@ fgUsage (bool verbose) SGPropertyNode options_root; + SG_LOG( SG_GENERAL, SG_ALERT, "" ); // To popup the console on Windows cout << endl; try { @@ -1686,6 +1687,10 @@ fgUsage (bool verbose) cout << endl; cout << "For a complete list of options use --help --verbose" << endl; } +#ifdef _MSC_VER + cout << "Hit a key to continue..." << endl; + cin.get(); +#endif } static void fgSearchAircraft(const SGPath &path, string_list &aircraft, @@ -1762,12 +1767,13 @@ void fgShowAircraft(const SGPath &path, bool recursive) { fgSearchAircraft( path, aircraft, recursive ); sort(aircraft.begin(), aircraft.end()); - SG_LOG( SG_GENERAL, SG_ALERT, "Available aircraft:" ); + SG_LOG( SG_GENERAL, SG_ALERT, "" ); // To popup the console on Windows + cout << "Available aircraft:" << endl; for ( unsigned int i = 0; i < aircraft.size(); i++ ) { - SG_LOG( SG_GENERAL, SG_ALERT, aircraft[i] ); + cout << aircraft[i] << endl; } #ifdef _MSC_VER - SG_LOG( SG_GENERAL, SG_ALERT, "Hit a key to continue..." ); + cout << "Hit a key to continue..." << endl; cin.get(); #endif }