X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FCockpit%2Fpanel.cxx;h=4134c196cfa91f498c134949798c357a7ac19d83;hb=fee003e8cc17f0aa9a1e9280dd823d20e231e967;hp=799298cb2a5a9617c4a8d8bbc685ef0509ed50f6;hpb=d53b612e2a72f06b51a9a4c24e6aefc992984b46;p=flightgear.git diff --git a/src/Cockpit/panel.cxx b/src/Cockpit/panel.cxx index 799298cb2..4134c196c 100644 --- a/src/Cockpit/panel.cxx +++ b/src/Cockpit/panel.cxx @@ -29,6 +29,10 @@ #include // sprintf #include +#include + +#include SG_GLU_H + #include #include @@ -53,7 +57,6 @@ // my hardware/driver requires many more. #define POFF_UNITS 4 - //////////////////////////////////////////////////////////////////////// // Local functions. //////////////////////////////////////////////////////////////////////// @@ -174,13 +177,13 @@ FGPanel::FGPanel () _mouseInstrument(0), _width(WIN_W), _height(int(WIN_H * 0.5768 + 1)), _view_height(int(WIN_H * 0.4232)), - _xsize_node(fgGetNode("/sim/startup/xsize", true)), - _ysize_node(fgGetNode("/sim/startup/ysize", true)), _visibility(fgGetNode("/sim/panel/visibility", true)), _x_offset(fgGetNode("/sim/panel/x-offset", true)), _y_offset(fgGetNode("/sim/panel/y-offset", true)), _jitter(fgGetNode("/sim/panel/jitter", true)), - _flipx(fgGetNode("/sim/panel/flip-x", true)) + _flipx(fgGetNode("/sim/panel/flip-x", true)), + _xsize_node(fgGetNode("/sim/startup/xsize", true)), + _ysize_node(fgGetNode("/sim/startup/ysize", true)) { } @@ -368,7 +371,8 @@ FGPanel::draw() // save some state glPushAttrib( GL_COLOR_BUFFER_BIT | GL_ENABLE_BIT | GL_LIGHTING_BIT - | GL_TEXTURE_BIT | GL_PIXEL_MODE_BIT ); + | GL_TEXTURE_BIT | GL_PIXEL_MODE_BIT | GL_CULL_FACE + | GL_DEPTH_BUFFER_BIT ); // Draw the background glEnable(GL_TEXTURE_2D); @@ -376,8 +380,13 @@ FGPanel::draw() glEnable(GL_BLEND); glEnable(GL_ALPHA_TEST); glEnable(GL_COLOR_MATERIAL); + glEnable(GL_CULL_FACE); + glCullFace(GL_BACK); + glDisable(GL_DEPTH_TEST); sgVec4 panel_color; - sgCopyVec4( panel_color, cur_light_params.scene_diffuse ); + + FGLight *l = (FGLight *)(globals->get_subsystem("lighting")); + sgCopyVec4( panel_color, l->scene_diffuse()); if ( fgGetDouble("/systems/electrical/outputs/instrument-lights") > 1.0 ) { if ( panel_color[0] < 0.7 ) panel_color[0] = 0.7; if ( panel_color[1] < 0.2 ) panel_color[1] = 0.2; @@ -432,16 +441,12 @@ FGPanel::draw() // Draw yellow "hotspots" if directed to. This is a panel authoring // feature; not intended to be high performance or to look good. - if(fgGetBool("/sim/panel-hotspots")) { - glPushAttrib(GL_ALL_ATTRIB_BITS); - glDisable(GL_DEPTH_TEST); + if ( fgGetBool("/sim/panel-hotspots") ) { glDisable(GL_TEXTURE_2D); glColor3f(1, 1, 0); - for(int i=0; i<_instruments.size(); i++) + for ( unsigned int i = 0; i < _instruments.size(); i++ ) _instruments[i]->drawHotspots(); - - glPopAttrib(); } @@ -673,7 +678,7 @@ FGPanelInstrument::~FGPanelInstrument () void FGPanelInstrument::drawHotspots() { - for(int i=0; i<_actions.size(); i++) { + for ( unsigned int i = 0; i < _actions.size(); i++ ) { FGPanelAction* a = _actions[i]; float x1 = getXPos() + a->getX(); float x2 = x1 + a->getWidth(); @@ -776,7 +781,6 @@ FGLayeredInstrument::draw () for (int i = 0; i < (int)_layers.size(); i++) { glPushMatrix(); - glPolygonOffset(-1, -POFF_UNITS*(i+2)); _layers[i]->draw(); glPopMatrix(); } @@ -944,7 +948,9 @@ FGTexturedLayer::draw () // From Curt: turn on the panel // lights after sundown. sgVec4 panel_color; - sgCopyVec4( panel_color, cur_light_params.scene_diffuse ); + + FGLight *l = (FGLight *)(globals->get_subsystem("lighting")); + sgCopyVec4( panel_color, l->scene_diffuse()); if ( fgGetDouble("/systems/electrical/outputs/instrument-lights") > 1.0 ) { if ( panel_color[0] < 0.7 ) panel_color[0] = 0.7; if ( panel_color[1] < 0.2 ) panel_color[1] = 0.2; @@ -1089,8 +1095,9 @@ FGTextLayer::Chunk::Chunk (const string &text, const string &fmt) } FGTextLayer::Chunk::Chunk (ChunkType type, const SGPropertyNode * node, - const string &fmt, float mult) - : _type(type), _fmt(fmt), _mult(mult) + const string &fmt, float mult, float offs, + bool truncation) + : _type(type), _fmt(fmt), _mult(mult), _offs(offs), _trunc(truncation) { if (_fmt.empty()) { if (type == TEXT_VALUE) @@ -1114,7 +1121,9 @@ FGTextLayer::Chunk::getValue () const sprintf(_buf, _fmt.c_str(), _node->getStringValue()); break; case DOUBLE_VALUE: - sprintf(_buf, _fmt.c_str(), _node->getFloatValue() * _mult); + double d = _offs + _node->getFloatValue() * _mult; + if (_trunc) d = (d < 0) ? -floor(-d) : floor(d); + sprintf(_buf, _fmt.c_str(), d); break; } return _buf;