+ // Calculate accelerations
+ // and jiggle the panel accordingly
+ // The factors and bounds are just
+ // initial guesses; using sqrt smooths
+ // out the spikes.
+ double x_offset = _x_offset;
+ double y_offset = _y_offset;
+
+ if (_jitter != 0.0) {
+ double a_x_pilot = current_aircraft.fdm_state->get_A_X_pilot();
+ double a_y_pilot = current_aircraft.fdm_state->get_A_Y_pilot();
+ double a_z_pilot = current_aircraft.fdm_state->get_A_Z_pilot();
+
+ double a_zx_pilot = a_z_pilot - a_x_pilot;
+
+ int x_adjust = int(sqrt(fabs(a_y_pilot) * _jitter)) *
+ (a_y_pilot < 0 ? -1 : 1);
+ int y_adjust = int(sqrt(fabs(a_zx_pilot) * _jitter)) *
+ (a_zx_pilot < 0 ? -1 : 1);
+
+ // adjustments in screen coordinates
+ x_offset += x_adjust;
+ y_offset += y_adjust;
+ }
+
+ if(fgGetBool("/sim/virtual-cockpit")) {
+ setupVirtualCockpit();
+ } else {
+ glMatrixMode(GL_PROJECTION);
+ glPushMatrix();
+ glLoadIdentity();
+ gluOrtho2D(winx, winx + winw, winy, winy + winh); /* right side up */
+ // gluOrtho2D(winx + winw, winx, winy + winh, winy); /* up side down */
+
+ glMatrixMode(GL_MODELVIEW);
+ glPushMatrix();
+ glLoadIdentity();
+
+ glTranslated(x_offset, y_offset, 0);
+ }
+
+ // Draw the background
+ glEnable(GL_TEXTURE_2D);
+ glDisable(GL_LIGHTING);
+ glEnable(GL_BLEND);
+ glEnable(GL_ALPHA_TEST);
+ glEnable(GL_COLOR_MATERIAL);
+ // glColor4f(1.0, 1.0, 1.0, 1.0);
+ if ( cur_light_params.sun_angle * SGD_RADIANS_TO_DEGREES < 95.0 ) {
+ glColor4fv( cur_light_params.scene_diffuse );
+ } else {
+ glColor4f(0.7, 0.2, 0.2, 1.0);
+ }
+ if (_bg != 0) {
+ glBindTexture(GL_TEXTURE_2D, _bg->getHandle());
+ // glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
+ // glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
+ glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
+ glBegin(GL_POLYGON);
+ glTexCoord2f(0.0, 0.0); glVertex3f(WIN_X, WIN_Y, 0);
+ glTexCoord2f(1.0, 0.0); glVertex3f(WIN_X + _width, WIN_Y, 0);
+ glTexCoord2f(1.0, 1.0); glVertex3f(WIN_X + _width, WIN_Y + _height, 0);
+ glTexCoord2f(0.0, 1.0); glVertex3f(WIN_X, WIN_Y + _height, 0);
+ glEnd();
+ } else {
+ for (int i = 0; i < 4; i ++) {
+ // top row of textures...(1,3,5,7)
+ glBindTexture(GL_TEXTURE_2D, _mbg[i*2]->getHandle());
+ glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
+ glBegin(GL_POLYGON);
+ glTexCoord2f(0.0, 0.0); glVertex3f(WIN_X + (_width/4) * i, WIN_Y + (_height/2), 0);
+ glTexCoord2f(1.0, 0.0); glVertex3f(WIN_X + (_width/4) * (i+1), WIN_Y + (_height/2), 0);
+ glTexCoord2f(1.0, 1.0); glVertex3f(WIN_X + (_width/4) * (i+1), WIN_Y + _height, 0);
+ glTexCoord2f(0.0, 1.0); glVertex3f(WIN_X + (_width/4) * i, WIN_Y + _height, 0);
+ glEnd();
+ // bottom row of textures...(2,4,6,8)
+ glBindTexture(GL_TEXTURE_2D, _mbg[(i*2)+1]->getHandle());
+ glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
+ glBegin(GL_POLYGON);
+ glTexCoord2f(0.0, 0.0); glVertex3f(WIN_X + (_width/4) * i, WIN_Y, 0);
+ glTexCoord2f(1.0, 0.0); glVertex3f(WIN_X + (_width/4) * (i+1), WIN_Y, 0);
+ glTexCoord2f(1.0, 1.0); glVertex3f(WIN_X + (_width/4) * (i+1), WIN_Y + (_height/2), 0);
+ glTexCoord2f(0.0, 1.0); glVertex3f(WIN_X + (_width/4) * i, WIN_Y + (_height/2), 0);
+ glEnd();
+ }
+
+ }