-#include <plib/ssg.h>
+#ifndef FG_PANELNODE_HXX
+#define FG_PANELNODE_HXX
+
+#include <osg/Vec3>
+#include <osg/Matrix>
+#include <osg/Drawable>
class FGPanel;
class SGPropertyNode;
bool fgHandle3DPanelMouseEvent(int button, int updown, int x, int y);
void fgUpdate3DPanels();
-class FGPanelNode : public ssgLeaf
+class FGPanelNode : public osg::Drawable // OSGFIXME
{
-protected:
- virtual void draw_geometry();
-
public:
FGPanelNode(SGPropertyNode* props);
virtual ~FGPanelNode();
- virtual void draw();
+ // OSGFIXME
+ virtual osg::Object* cloneType() const { return 0; }
+ virtual osg::Object* clone(const osg::CopyOp& copyop) const { return 0; }
+
bool doMouseAction(int button, int updown, int x, int y);
FGPanel* getPanel() { return _panel; }
- virtual void recalcBSphere() { bsphere_is_invalid = 0; }
-
- //
- // A bunch of Plib functions that aren't implemented. I don't
- // even know what many of them do, but they're pure virtual and
- // require implementation.
- //
- virtual int getNumTriangles() { die(); return 0; }
- virtual void getTriangle(int n, short* v1, short* v2, short* v3) { die(); }
- virtual int getNumLines() { die(); return 0; }
- virtual void getLine(int n, short* v1, short* v2) { die(); }
-
- virtual void drawHighlight(sgVec4 colour) { die(); }
- virtual void drawHighlight(sgVec4 colour, int i) { die(); }
- virtual float* getVertex(int i) { die(); return 0; }
- virtual float* getNormal(int i) { die(); return 0; }
- virtual float* getColour(int i) { die(); return 0; }
- virtual float* getTexCoord(int i) { die(); return 0; }
- virtual void pick(int baseName) { die(); }
- virtual void isect_triangles(sgSphere* s, sgMat4 m, int testNeeded) { die(); }
- virtual void hot_triangles(sgVec3 s, sgMat4 m, int testNeeded) { die(); }
- virtual void los_triangles(sgVec3 s, sgMat4 m, int testNeeded) { die(); }
- virtual void transform(const sgMat4 m) { die(); }
+ virtual void drawImplementation(osg::RenderInfo& renderInfo) const
+ { drawImplementation(*renderInfo.getState()); }
+ void drawImplementation(osg::State& state) const;
+ virtual osg::BoundingBox computeBound() const;
private:
- // Handler for all the unimplemented methods above
- void die();
-
FGPanel* _panel;
// Panel corner coordinates
- float _bottomLeft[3], _topLeft[3], _bottomRight[3];
+ osg::Vec3 _bottomLeft, _topLeft, _bottomRight;
// The input range expected in the panel definition. These x/y
// coordinates will map to the right/top sides.
// The matrix that results, which transforms 2D x/y panel
// coordinates into 3D coordinates of the panel quadrilateral.
- GLfloat _xform[16];
+ osg::Matrix _xform;
// The matrix transformation state that was active the last time
// we were rendered. Used by the mouse code to compute
// intersections.
- GLfloat _lastModelview[16];
- GLfloat _lastProjection[16];
- GLint _lastViewport[4];
+ mutable osg::Matrix _lastModelview;
+ mutable osg::Matrix _lastProjection;
+ mutable double _lastViewport[4];
};
+
+
+#endif // FG_PANELNODE_HXX