From 443f3f36546e4554dc71dc35a4d4324bf5e2c3f0 Mon Sep 17 00:00:00 2001 From: daveluff Date: Wed, 22 Jul 2009 21:00:43 +0000 Subject: [PATCH] Fix the rendering of the KLN89 on the 2D panel that was broken during the move to osg. This is an interim step with the aim being to eventually use render-to-texture. --- src/Cockpit/panel.cxx | 2 +- src/Instrumentation/dclgps.cxx | 5 +-- src/Instrumentation/dclgps.hxx | 2 +- src/Instrumentation/render_area_2d.cxx | 57 +++++++++++++------------- src/Instrumentation/render_area_2d.hxx | 6 ++- 5 files changed, 38 insertions(+), 34 deletions(-) diff --git a/src/Cockpit/panel.cxx b/src/Cockpit/panel.cxx index 3754d7911..cd68b342a 100644 --- a/src/Cockpit/panel.cxx +++ b/src/Cockpit/panel.cxx @@ -914,7 +914,7 @@ FGSpecialInstrument::~FGSpecialInstrument () void FGSpecialInstrument::draw (osg::State& state) { - complex->draw(); + complex->draw(state); } diff --git a/src/Instrumentation/dclgps.cxx b/src/Instrumentation/dclgps.cxx index 9d6ccc675..f3bbfc2a6 100644 --- a/src/Instrumentation/dclgps.cxx +++ b/src/Instrumentation/dclgps.cxx @@ -356,9 +356,8 @@ DCLGPS::~DCLGPS() { // TODO - may need to delete the approach database!! } -void DCLGPS::draw() { - //cout << "draw called!\n"; - _instrument->draw(); +void DCLGPS::draw(osg::State& state) { + _instrument->draw(state); } void DCLGPS::init() { diff --git a/src/Instrumentation/dclgps.hxx b/src/Instrumentation/dclgps.hxx index 435f7899a..a7b6e0568 100644 --- a/src/Instrumentation/dclgps.hxx +++ b/src/Instrumentation/dclgps.hxx @@ -251,7 +251,7 @@ public: DCLGPS(RenderArea2D* instrument); virtual ~DCLGPS() = 0; - virtual void draw(); + virtual void draw(osg::State& state); virtual void init(); virtual void bind(); diff --git a/src/Instrumentation/render_area_2d.cxx b/src/Instrumentation/render_area_2d.cxx index ae8784c54..5a08009a1 100644 --- a/src/Instrumentation/render_area_2d.cxx +++ b/src/Instrumentation/render_area_2d.cxx @@ -62,24 +62,31 @@ RenderArea2D::RenderArea2D(int logx, int logy, int sizex, int sizey, int posx, i _ra2d_debug = false; } -void RenderArea2D::draw() { -#if 0 - glDisable(GL_TEXTURE_2D); - /* - glColor3f(1, 1, 0); +void RenderArea2D::draw(osg::State& state) { - float x1 = _posx; - float x2 = _posx + _sizex; - float y1 = _posy; - float y2 = _posy + _sizey; + static osg::ref_ptr renderArea2DStateSet; + if(!renderArea2DStateSet.valid()) { + renderArea2DStateSet = new osg::StateSet; + renderArea2DStateSet->setTextureMode(0, GL_TEXTURE_2D, osg::StateAttribute::OFF); + renderArea2DStateSet->setMode(GL_LIGHTING, osg::StateAttribute::OFF); + } - glBegin(GL_LINE_LOOP); - glVertex2f(x1, y1); - glVertex2f(x1, y2); - glVertex2f(x2, y2); - glVertex2f(x2, y1); - glEnd(); - */ + state.pushStateSet(renderArea2DStateSet.get()); + state.apply(); + state.setActiveTextureUnit(0); + state.setClientActiveTextureUnit(0); + + // DCL - the 2 lines below are copied verbatim from the hotspot drawing code. + // I am not sure if they are needed here or not. + glPushAttrib(GL_ENABLE_BIT); + glDisable(GL_COLOR_MATERIAL); + + // FIXME - disabling all clip planes causes bleed-through through the splash screen. + glDisable(GL_CLIP_PLANE0); + glDisable(GL_CLIP_PLANE1); + glDisable(GL_CLIP_PLANE2); + glDisable(GL_CLIP_PLANE3); + oldDrawBackground(); for(unsigned int i = 0; i < drawing_list.size(); ++i) { @@ -101,8 +108,12 @@ void RenderArea2D::draw() { } } - glEnable(GL_TEXTURE_2D); -#endif + glPopAttrib(); + + state.popStateSet(); + state.apply(); + state.setActiveTextureUnit(0); + state.setClientActiveTextureUnit(0); } // Set clipping region in logical units @@ -336,34 +347,24 @@ void RenderArea2D::Flush() { // ----------------------------------------- void RenderArea2D::doSetColor( const float *rgba ) { - //OSGFIXME -#if 0 glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, rgba); glColor4fv( rgba ); -#endif } void RenderArea2D::doDrawQuad( const sgVec2 *p, const sgVec3 *normals ) { - //cout << "doDrawQuad: " << *p[0] << ", " << *(p[0]+1) << ", " << *p[1] << ", " << *(p[1]+1) << ", " << *p[2] << ", " << *p([2]+1) << ", " << *p[3] << ", " << *p([3]+1) <<'\n'; - //OSGFIXME -#if 0 glBegin(GL_QUADS); glNormal3fv( normals[0] ); glVertex2fv( p[0] ); glNormal3fv( normals[1] ); glVertex2fv( p[1] ); glNormal3fv( normals[2] ); glVertex2fv( p[2] ); glNormal3fv( normals[3] ); glVertex2fv( p[3] ); glEnd(); -#endif } void RenderArea2D::doDrawQuad( const sgVec2 *p, const sgVec3 *normals, const sgVec4 *color ) { - //OSGFIXME -#if 0 glBegin(GL_QUADS); glColor4fv( color[0] );glNormal3fv( normals[0] ); glVertex2fv( p[0] ); glColor4fv( color[1] );glNormal3fv( normals[1] ); glVertex2fv( p[1] ); glColor4fv( color[2] );glNormal3fv( normals[2] ); glVertex2fv( p[2] ); glColor4fv( color[3] );glNormal3fv( normals[3] ); glVertex2fv( p[3] ); glEnd(); -#endif } diff --git a/src/Instrumentation/render_area_2d.hxx b/src/Instrumentation/render_area_2d.hxx index 6b4dc3230..44c5c0db2 100644 --- a/src/Instrumentation/render_area_2d.hxx +++ b/src/Instrumentation/render_area_2d.hxx @@ -28,6 +28,10 @@ # include #endif +#include +#include +#include + #include #include @@ -56,7 +60,7 @@ public: RenderArea2D(int logx, int logy, int sizex, int sizey, int posx, int posy); ~RenderArea2D(); - void draw(); + void draw(osg::State& state); void SetPixelColor(const float* rgba); void SetBackgroundColor(const float* rgba);