]> git.mxchange.org Git - flightgear.git/blobdiff - src/Canvas/canvas.hxx
Separate instruments from cockpit displays.
[flightgear.git] / src / Canvas / canvas.hxx
index 29d9ee93e04d368bfb9af56fde5d71b3f2d8b2e5..2071452997cb88364f9c091a5523b4dd274df985 100644 (file)
 #include "property_based_element.hxx"
 
 #include <Canvas/canvas_fwd.hpp>
-#include <Instrumentation/od_gauge.hxx>
+#include <Cockpit/od_gauge.hxx>
 
 #include <simgear/props/propertyObject.hxx>
 #include <osg/NodeCallback>
+#include <osg/observer_ptr>
 
 #include <memory>
 #include <string>
@@ -66,6 +67,7 @@ class Canvas:
         virtual void operator()(osg::Node* node, osg::NodeVisitor* nv);
     };
     typedef osg::ref_ptr<CameraCullCallback> CameraCullCallbackPtr;
+    typedef osg::observer_ptr<CameraCullCallback> CameraCullCallbackWeakPtr;
 
     /**
      * This callback is installed on every placement of the canvas in the
@@ -78,12 +80,17 @@ class Canvas:
         CullCallback(CameraCullCallback* camera_cull);
 
       private:
-        CameraCullCallback *_camera_cull;
+        CameraCullCallbackWeakPtr _camera_cull;
 
         virtual void operator()(osg::Node* node, osg::NodeVisitor* nv);
     };
     typedef osg::ref_ptr<CullCallback> CullCallbackPtr;
 
+    /**
+     * Callback for resetting the render_dirty flag after rendering a frame.
+     */
+    class DrawCallback;
+
     Canvas(SGPropertyNode* node);
     virtual ~Canvas();
 
@@ -91,10 +98,10 @@ class Canvas:
 
     int getSizeX() const
     { return _size_x; }
-  
+
     int getSizeY() const
     { return _size_y; }
-  
+
     void setSizeX(int sx);
     void setSizeY(int sy);
 
@@ -140,7 +147,8 @@ class Canvas:
                                     _mouse_event;
 
     bool _sampling_dirty,
-         _color_dirty;
+         _color_dirty,
+         _render_dirty;
 
     FGODGauge _texture;
     std::auto_ptr<canvas::Group> _root_group;