#include "version.h"
-#include "bfi.hxx"
#include "fg_init.hxx"
#include "fg_io.hxx"
+#include "fg_props.hxx"
#include "globals.hxx"
-#include "keyboard.hxx"
#include "splash.hxx"
#ifdef macintosh
}
+// For HiRes screen Dumps using Brian Pauls TR Library
+void trRenderFrame( void ) {
+
+ if ( fgPanelVisible() ) {
+ GLfloat height = fgGetInt("/sim/startup/ysize");
+ GLfloat view_h =
+ (current_panel->getViewHeight() - current_panel->getYOffset())
+ * (height / 768.0) + 1;
+ glTranslatef( 0.0, view_h, 0.0 );
+ }
+
+ static double m_log01 = -log( 0.01 );
+ static double sqrt_m_log01 = sqrt( m_log01 );
+
+ 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 = &cur_light_params;
+
+ 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();
+
+ // update fog params
+ double actual_visibility = thesky->get_visibility();
+ // GLfloat fog_exp_density = m_log01 / actual_visibility;
+ GLfloat fog_exp2_density = sqrt_m_log01 / actual_visibility;
+ GLfloat fog_exp2_punch_through = sqrt_m_log01 / ( actual_visibility * 1.5 );
+
+ 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 );
+
+ 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();
+
+ // draw the ssg scene
+ // return to the desired diffuse color
+ ssgGetLight( 0 ) -> setColour( GL_DIFFUSE, l->scene_diffuse );
+ glEnable( GL_DEPTH_TEST );
+ ssgCullAndDraw( scene );
+
+ // draw the lights
+ glFogf (GL_FOG_DENSITY, fog_exp2_punch_through);
+ ssgCullAndDraw( lighting );
+
+ thesky->postDraw( cur_fdm_state->get_Altitude() * SG_FEET_TO_METER );
+
+ // need to do this here as hud_and_panel state is static to
+ // main.cxx and HUD and Panel routines have to be called with
+ // knowledge of the the TR struct < see gui.cxx::HighResDump()
+ hud_and_panel->apply();
+}
+
+
// Update all Visuals (redraws anything graphics related)
void fgRenderFrame( void ) {
- // Update the BFI.
- FGBFI::update();
+ // Update the default (kludged) properties.
+ fgUpdateProps();
fgLIGHT *l = &cur_light_params;
static double last_visibility = -9999;
if (prop_selector != NULL) {
int propsel_mask = 0;
+ double rpm = fgGetDouble("/engines/engine[0]/rpm");
for (int i = 0; i < acmodel_npropsettings; i++) {
- if (FGBFI::getRPM() >= acmodel_proprpms[i][0] &&
- FGBFI::getRPM() <= acmodel_proprpms[i][1]) {
+ if (rpm >= acmodel_proprpms[i][0] &&
+ rpm <= acmodel_proprpms[i][1]) {
propsel_mask |= 1 << i;
}
}
cur_fdm_state->get_Runway_altitude() * SG_FEET_TO_METER,
cur_fdm_state->get_Altitude() * SG_FEET_TO_METER); */
+ // cout << "Warp = " << globals->get_warp() << endl;
+
// update "time"
if ( globals->get_warp_delta() != 0 ) {
globals->inc_warp( globals->get_warp_delta() );
if ( fgGetString("/sim/startup/airport-id").length() ) {
// fgSetPosFromAirportID( fgGetString("/sim/startup/airport-id") );
fgSetPosFromAirportIDandHdg( fgGetString("/sim/startup/airport-id"),
- fgGetDouble("/orientation/heading") );
+ fgGetDouble("/orientation/heading-deg") );
}
// Initialize time
SGPath zone( globals->get_fg_root() );
zone.append( "Timezone" );
- SGTime *t = new SGTime( fgGetDouble("/position/longitude") * SGD_DEGREES_TO_RADIANS,
- fgGetDouble("/position/latitude") * SGD_DEGREES_TO_RADIANS,
+ SGTime *t = new SGTime( fgGetDouble("/position/longitude-deg") * SGD_DEGREES_TO_RADIANS,
+ fgGetDouble("/position/latitude-deg") * SGD_DEGREES_TO_RADIANS,
zone.str() );
// Handle potential user specified time offsets
sgMat4 rot_matrix;
sgMat4 off_matrix;
sgMat4 res_matrix;
- float h_rot = fgGetFloat("/sim/model/h-rotation", 0.0);
- float p_rot = fgGetFloat("/sim/model/p-rotation", 0.0);
- float r_rot = fgGetFloat("/sim/model/r-rotation", 0.0);
- float x_off = fgGetFloat("/sim/model/x-offset", 0.0);
- float y_off = fgGetFloat("/sim/model/y-offset", 0.0);
- float z_off = fgGetFloat("/sim/model/z-offset", 0.0);
+ float h_rot = fgGetFloat("/sim/model/heading-offset-deg", 0.0);
+ float p_rot = fgGetFloat("/sim/model/roll-offset-deg", 0.0);
+ float r_rot = fgGetFloat("/sim/model/pitch-offset-deg", 0.0);
+ float x_off = fgGetFloat("/sim/model/x-offset-m", 0.0);
+ float y_off = fgGetFloat("/sim/model/y-offset-m", 0.0);
+ float z_off = fgGetFloat("/sim/model/z-offset-m", 0.0);
sgMakeRotMat4(rot_matrix, h_rot, p_rot, r_rot);
sgMakeTransMat4(off_matrix, x_off, y_off, z_off);
sgMultMat4(res_matrix, off_matrix, rot_matrix);