X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FCockpit%2Fpanel.cxx;h=03e003c6c218d34375b8975f6c16e3919240849c;hb=f057fd0d4897ef65c4d36159af37ba3fdd544798;hp=af851a1f19761b442858b4ab50d8e0b2e447d99f;hpb=174852f01e445faa6ddb5d46e59dbf54e2bff92c;p=flightgear.git diff --git a/src/Cockpit/panel.cxx b/src/Cockpit/panel.cxx index af851a1f1..03e003c6c 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. //////////////////////////////////////////////////////////////////////// @@ -165,6 +168,7 @@ FGCroppedTexture::getTexture () static fntRenderer text_renderer; static fntTexFont *default_font = 0; static fntTexFont *led_font = 0; +static sgVec4 panel_color; /** * Constructor. @@ -180,7 +184,8 @@ FGPanel::FGPanel () _jitter(fgGetNode("/sim/panel/jitter", true)), _flipx(fgGetNode("/sim/panel/flip-x", true)), _xsize_node(fgGetNode("/sim/startup/xsize", true)), - _ysize_node(fgGetNode("/sim/startup/ysize", true)) + _ysize_node(fgGetNode("/sim/startup/ysize", true)), + _enable_depth_test(false) { } @@ -379,9 +384,13 @@ FGPanel::draw() glEnable(GL_COLOR_MATERIAL); glEnable(GL_CULL_FACE); glCullFace(GL_BACK); - glDepthMask(GL_FALSE); - sgVec4 panel_color; - sgCopyVec4( panel_color, cur_light_params.scene_diffuse ); + if( _enable_depth_test ) + glDepthFunc(GL_ALWAYS); + else + glDisable(GL_DEPTH_TEST); + + 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; @@ -426,10 +435,6 @@ FGPanel::draw() instrument_list_type::const_iterator current = _instruments.begin(); instrument_list_type::const_iterator end = _instruments.end(); - // Don't let the instruments be visible trhought the roof of the c310-3d - // This does hurt the magnetic compass in the default c172-3d, - // but we need a real 3d compass anyway. - glPolygonOffset(-1, -5*POFF_UNITS); for ( ; current != end; current++) { FGPanelInstrument * instr = *current; glPushMatrix(); @@ -441,19 +446,17 @@ 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); glDisable(GL_TEXTURE_2D); glColor3f(1, 1, 0); for ( unsigned int i = 0; i < _instruments.size(); i++ ) _instruments[i]->drawHotspots(); - - glPopAttrib(); } // restore some original state + if( _enable_depth_test ) + glDepthFunc(GL_LESS); glPopAttrib(); glPolygonOffset(0, 0); glDisable(GL_POLYGON_OFFSET_FILL); @@ -587,6 +590,10 @@ FGPanel::doMouseAction (int button, int updown, int x, int y) return doLocalMouseAction(button, updown, x, y); } +void FGPanel::setDepthTest (bool enable) { + _enable_depth_test = enable; +} + ////////////////////////////////////////////////////////////////////////. @@ -601,14 +608,14 @@ FGPanelAction::FGPanelAction (int button, int x, int y, int w, int h, bool repeatable) : _button(button), _x(x), _y(y), _w(w), _h(h), _repeatable(repeatable) { - for (unsigned int i = 0; i < 2; i++) { - for (unsigned int j = 0; j < _bindings[i].size(); j++) - delete _bindings[i][j]; - } } FGPanelAction::~FGPanelAction () { + for (unsigned int i = 0; i < 2; i++) { + for (unsigned int j = 0; j < _bindings[i].size(); j++) + delete _bindings[i][j]; + } } void @@ -784,7 +791,6 @@ FGLayeredInstrument::draw () for (int i = 0; i < (int)_layers.size(); i++) { glPushMatrix(); - // glPolygonOffset(-1, -POFF_UNITS*(i+2)); _layers[i]->draw(); glPopMatrix(); } @@ -951,13 +957,6 @@ FGTexturedLayer::draw () // From Curt: turn on the panel // lights after sundown. - sgVec4 panel_color; - sgCopyVec4( panel_color, cur_light_params.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; - if ( panel_color[2] < 0.2 ) panel_color[2] = 0.2; - } glColor4fv( panel_color ); glTexCoord2f(_texture.getMinX(), _texture.getMinY()); glVertex2f(-w2, -h2); @@ -1097,8 +1096,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) @@ -1122,7 +1122,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;