# include <config.h>
#endif
-#ifdef HAVE_WINDOWS_H
+#ifdef HAVE_WINDOWS_H
# include <windows.h>
#endif
}
-
+void FGTextureManager::addTexture(const string &relativePath,
+ osg::Texture2D* texture)
+{
+ _textureMap[relativePath] = texture;
+}
\f
////////////////////////////////////////////////////////////////////////
// Implementation of FGCropped Texture.
material->setSpecular(osg::Material::FRONT_AND_BACK, osg::Vec4(0, 0, 0, 1));
material->setEmission(osg::Material::FRONT_AND_BACK, osg::Vec4(0, 0, 0, 1));
panelStateSet->setAttribute(material);
- panelStateSet->setMode(GL_COLOR_MATERIAL, osg::StateAttribute::ON);
panelStateSet->setMode(GL_CULL_FACE, osg::StateAttribute::ON);
panelStateSet->setAttributeAndModes(new osg::CullFace(osg::CullFace::BACK));
- if ( _enable_depth_test )
- panelStateSet->setAttributeAndModes(new osg::Depth(osg::Depth::ALWAYS));
- else
- panelStateSet->setMode(GL_DEPTH_TEST, osg::StateAttribute::OFF);
+ panelStateSet->setAttributeAndModes(new osg::Depth(osg::Depth::LEQUAL));
}
+ if ( _enable_depth_test )
+ panelStateSet->setMode(GL_DEPTH_TEST, osg::StateAttribute::ON);
+ else
+ 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());
+ sgCopyVec4( panel_color, l->scene_diffuse().data());
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 (_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);
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));
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);
glEnd();
state.popStateSet();
state.apply();
+ state.setActiveTextureUnit(0);
+ state.setClientActiveTextureUnit(0);
+
}
}
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.
if ( fgGetBool("/sim/panel-hotspots") ) {
- static osg::ref_ptr<osg::StateSet> hotspotStateSet = new osg::StateSet;
- hotspotStateSet->setTextureMode(0, GL_TEXTURE_2D, osg::StateAttribute::OFF);
+ static osg::ref_ptr<osg::StateSet> hotspotStateSet;
+ if (!hotspotStateSet.valid()) {
+ hotspotStateSet = new osg::StateSet;
+ hotspotStateSet->setTextureMode(0, GL_TEXTURE_2D, osg::StateAttribute::OFF);
+ hotspotStateSet->setMode(GL_LIGHTING, osg::StateAttribute::OFF);
+ }
+
state.pushStateSet(hotspotStateSet.get());
state.apply();
-
+ state.setActiveTextureUnit(0);
+ state.setClientActiveTextureUnit(0);
+
+
+ glPushAttrib(GL_ENABLE_BIT);
+ glDisable(GL_COLOR_MATERIAL);
glColor3f(1, 1, 0);
for ( unsigned int i = 0; i < _instruments.size(); i++ )
_instruments[i]->drawHotspots(state);
+
+ glPopAttrib();
+
state.popStateSet();
state.apply();
+ state.setActiveTextureUnit(0);
+ state.setClientActiveTextureUnit(0);
+
}
}
}
void
-FGPanelAction::addBinding (FGBinding * binding, int updown)
+FGPanelAction::addBinding (SGBinding * binding, int updown)
{
_bindings[updown].push_back(binding);
}
transform();
state.pushStateSet(_texture.getTexture());
state.apply();
+ state.setActiveTextureUnit(0);
+ state.setClientActiveTextureUnit(0);
+
glBegin(GL_POLYGON);
if (_emissive) {
glEnd();
state.popStateSet();
state.apply();
+ state.setActiveTextureUnit(0);
+ state.setClientActiveTextureUnit(0);
+
}
}