X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FCockpit%2Fpanel.cxx;h=a7b860afa43aa4ac8433a640f0e4640f9021a5c8;hb=35396de6f87e2a8b8d0c21eb1d0908db586799f8;hp=68151bcb7046598a8f448519fb4917c5ef5d4776;hpb=059c906be55fb060ba70231912cbf96f37fc7290;p=flightgear.git diff --git a/src/Cockpit/panel.cxx b/src/Cockpit/panel.cxx index 68151bcb7..a7b860afa 100644 --- a/src/Cockpit/panel.cxx +++ b/src/Cockpit/panel.cxx @@ -31,12 +31,9 @@ # include #endif -#ifdef HAVE_WINDOWS_H -# include -#endif - #include // sprintf #include +#include #include #include @@ -46,13 +43,12 @@ #include -#include SG_GLU_H - #include #include #include #include +#include #include
#include
@@ -98,18 +94,18 @@ get_aspect_adjust (int xsize, int ysize) bool fgPanelVisible () { - if (globals->get_current_panel() == 0) + const FGPanel* current = globals->get_current_panel(); + if (current == 0) return false; - if (globals->get_current_panel()->getVisibility() == 0) + if (current->getVisibility() == 0) return false; if (globals->get_viewmgr()->get_current() != 0) return false; - if (globals->get_current_view()->getHeadingOffset_deg() * SGD_DEGREES_TO_RADIANS != 0) + if (current->getAutohide() && globals->get_current_view()->getHeadingOffset_deg() * SGD_DEGREES_TO_RADIANS != 0) return false; return true; } - //////////////////////////////////////////////////////////////////////// // Implementation of FGTextureManager. @@ -118,7 +114,7 @@ fgPanelVisible () map > FGTextureManager::_textureMap; osg::Texture2D* -FGTextureManager::createTexture (const string &relativePath) +FGTextureManager::createTexture (const string &relativePath, bool staticTexture) { osg::Texture2D* texture = _textureMap[relativePath].get(); if (texture == 0) { @@ -127,7 +123,7 @@ FGTextureManager::createTexture (const string &relativePath) SGPath tpath(globals->get_fg_root()); tpath.append(relativePath); - texture = SGLoadTexture2D(tpath); + texture = SGLoadTexture2D(staticTexture, tpath); _textureMap[relativePath] = texture; if (!_textureMap[relativePath].valid()) @@ -139,7 +135,11 @@ FGTextureManager::createTexture (const string &relativePath) } - +void FGTextureManager::addTexture(const string &relativePath, + osg::Texture2D* texture) +{ + _textureMap[relativePath] = texture; +} //////////////////////////////////////////////////////////////////////// // Implementation of FGCropped Texture. @@ -378,6 +378,8 @@ FGPanel::draw(osg::State& state) panelStateSet->setMode(GL_DEPTH_TEST, osg::StateAttribute::OFF); state.pushStateSet(panelStateSet.get()); state.apply(); + state.setActiveTextureUnit(0); + state.setClientActiveTextureUnit(0); FGLight *l = (FGLight *)(globals->get_subsystem("lighting")); sgCopyVec4( panel_color, l->scene_diffuse().data()); @@ -390,6 +392,9 @@ FGPanel::draw(osg::State& state) if (_bg != 0) { state.pushStateSet(_bg.get()); state.apply(); + state.setActiveTextureUnit(0); + state.setClientActiveTextureUnit(0); + glBegin(GL_POLYGON); glTexCoord2f(0.0, 0.0); glVertex2f(WIN_X, WIN_Y); glTexCoord2f(1.0, 0.0); glVertex2f(WIN_X + _width, WIN_Y); @@ -398,11 +403,17 @@ FGPanel::draw(osg::State& state) glEnd(); state.popStateSet(); state.apply(); + state.setActiveTextureUnit(0); + state.setClientActiveTextureUnit(0); + } else { for (int i = 0; i < 4; i ++) { // top row of textures...(1,3,5,7) state.pushStateSet(_mbg[i*2].get()); state.apply(); + state.setActiveTextureUnit(0); + state.setClientActiveTextureUnit(0); + glBegin(GL_POLYGON); glTexCoord2f(0.0, 0.0); glVertex2f(WIN_X + (_width/4) * i, WIN_Y + (_height/2)); glTexCoord2f(1.0, 0.0); glVertex2f(WIN_X + (_width/4) * (i+1), WIN_Y + (_height/2)); @@ -411,9 +422,15 @@ FGPanel::draw(osg::State& state) glEnd(); state.popStateSet(); state.apply(); + state.setActiveTextureUnit(0); + state.setClientActiveTextureUnit(0); + // bottom row of textures...(2,4,6,8) state.pushStateSet(_mbg[i*2+1].get()); state.apply(); + state.setActiveTextureUnit(0); + state.setClientActiveTextureUnit(0); + glBegin(GL_POLYGON); glTexCoord2f(0.0, 0.0); glVertex2f(WIN_X + (_width/4) * i, WIN_Y); glTexCoord2f(1.0, 0.0); glVertex2f(WIN_X + (_width/4) * (i+1), WIN_Y); @@ -422,6 +439,9 @@ FGPanel::draw(osg::State& state) glEnd(); state.popStateSet(); state.apply(); + state.setActiveTextureUnit(0); + state.setClientActiveTextureUnit(0); + } } @@ -467,6 +487,9 @@ FGPanel::draw(osg::State& state) state.popStateSet(); state.apply(); + state.setActiveTextureUnit(0); + state.setClientActiveTextureUnit(0); + // Draw yellow "hotspots" if directed to. This is a panel authoring // feature; not intended to be high performance or to look good. @@ -480,6 +503,9 @@ FGPanel::draw(osg::State& state) state.pushStateSet(hotspotStateSet.get()); state.apply(); + state.setActiveTextureUnit(0); + state.setClientActiveTextureUnit(0); + glPushAttrib(GL_ENABLE_BIT); glDisable(GL_COLOR_MATERIAL); @@ -492,6 +518,9 @@ FGPanel::draw(osg::State& state) state.popStateSet(); state.apply(); + state.setActiveTextureUnit(0); + state.setClientActiveTextureUnit(0); + } } @@ -1019,6 +1048,9 @@ FGTexturedLayer::draw (osg::State& state) transform(); state.pushStateSet(_texture.getTexture()); state.apply(); + state.setActiveTextureUnit(0); + state.setClientActiveTextureUnit(0); + glBegin(GL_POLYGON); if (_emissive) { @@ -1036,6 +1068,9 @@ FGTexturedLayer::draw (osg::State& state) glEnd(); state.popStateSet(); state.apply(); + state.setActiveTextureUnit(0); + state.setClientActiveTextureUnit(0); + } }