-void RenderArea2D::draw() {
- glDisable(GL_TEXTURE_2D);
- /*
- glColor3f(1, 1, 0);
-
- float x1 = _posx;
- float x2 = _posx + _sizex;
- float y1 = _posy;
- float y2 = _posy + _sizey;
-
- glBegin(GL_LINE_LOOP);
- glVertex2f(x1, y1);
- glVertex2f(x1, y2);
- glVertex2f(x2, y2);
- glVertex2f(x2, y1);
- glEnd();
- */
- oldDrawBackground();
-
- for(unsigned int i = 0; i < drawing_list.size(); ++i) {
- RA2DPrimitive prim = drawing_list[i];
- switch(prim.type) {
- case RA2D_LINE:
- oldDrawLine(prim.x1, prim.y1, prim.x2, prim.y2);
- break;
- case RA2D_QUAD:
- if(prim.debug) {
- //cout << "Clipping = " << _clipx1 << ", " << _clipy1 << " to " << _clipx2 << ", " << _clipy2 << '\n';
- //cout << "Drawing quad " << prim.x1 << ", " << prim.y1 << " to " << prim.x2 << ", " << prim.y2 << '\n';
- }
- oldDrawQuad(prim.x1, prim.y1, prim.x2, prim.y2, prim.invert);
- break;
- case RA2D_PIXEL:
- oldDrawPixel(prim.x1, prim.y1, prim.invert);
- break;
- }
- }
-
- glEnable(GL_TEXTURE_2D);
+void RenderArea2D::Draw(osg::State& state) {
+
+ static osg::ref_ptr<osg::StateSet> renderArea2DStateSet;
+ if(!renderArea2DStateSet.valid()) {
+ renderArea2DStateSet = new osg::StateSet;
+ renderArea2DStateSet->setTextureMode(0, GL_TEXTURE_2D, osg::StateAttribute::OFF);
+ renderArea2DStateSet->setMode(GL_LIGHTING, osg::StateAttribute::OFF);
+ }
+
+ 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);
+
+ DoDrawBackground();
+
+ for(unsigned int i = 0; i < drawing_list.size(); ++i) {
+ RA2DPrimitive prim = drawing_list[i];
+ switch(prim.type) {
+ case RA2D_LINE:
+ DoDrawLine(prim.x1, prim.y1, prim.x2, prim.y2);
+ break;
+ case RA2D_QUAD:
+ if(prim.debug) {
+ //cout << "Clipping = " << _clipx1 << ", " << _clipy1 << " to " << _clipx2 << ", " << _clipy2 << '\n';
+ //cout << "Drawing quad " << prim.x1 << ", " << prim.y1 << " to " << prim.x2 << ", " << prim.y2 << '\n';
+ }
+ DoDrawQuad(prim.x1, prim.y1, prim.x2, prim.y2, prim.invert);
+ break;
+ case RA2D_PIXEL:
+ DoDrawPixel(prim.x1, prim.y1, prim.invert);
+ break;
+ }
+ }
+
+ drawing_list.clear();
+
+ glPopAttrib();
+
+ state.popStateSet();
+ state.apply();
+ state.setActiveTextureUnit(0);
+ state.setClientActiveTextureUnit(0);
+}
+
+void RenderArea2D::Flush() {
+ drawing_list.clear();
+}
+
+void RenderArea2D::SetPixelColor(const float* rgba) {
+ _pixelColor[0] = rgba[0];
+ _pixelColor[1] = rgba[1];
+ _pixelColor[2] = rgba[2];
+ _pixelColor[3] = rgba[3];