]> git.mxchange.org Git - flightgear.git/commitdiff
Canvas: Only use cull callback if it's still valid
authorThomas Geymayer <tomgey@gmail.com>
Sat, 1 Sep 2012 14:50:21 +0000 (16:50 +0200)
committerThomas Geymayer <tomgey@gmail.com>
Sat, 1 Sep 2012 14:50:21 +0000 (16:50 +0200)
src/Canvas/canvas.cxx
src/Canvas/canvas.hxx
src/Canvas/elements/CanvasImage.cxx

index eca171c3892cfeef5f3c3da6ece87885efefa957..1e64f795892cdb027bfdac71a98bb18b9ac1a7c3 100644 (file)
@@ -73,7 +73,7 @@ Canvas::CullCallback::CullCallback(CameraCullCallback* camera_cull):
 void Canvas::CullCallback::operator()( osg::Node* node,
                                        osg::NodeVisitor* nv )
 {
-  if( nv->getTraversalMask() & simgear::MODEL_BIT )
+  if( (nv->getTraversalMask() & simgear::MODEL_BIT) && _camera_cull.valid() )
     _camera_cull->enableRendering();
 
   traverse(node, nv);
index 29d9ee93e04d368bfb9af56fde5d71b3f2d8b2e5..dbfae12fe664c9fcdefba6575bd5f94c8b063ae1 100644 (file)
@@ -27,6 +27,7 @@
 
 #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,7 +80,7 @@ class Canvas:
         CullCallback(CameraCullCallback* camera_cull);
 
       private:
-        CameraCullCallback *_camera_cull;
+        CameraCullCallbackWeakPtr _camera_cull;
 
         virtual void operator()(osg::Node* node, osg::NodeVisitor* nv);
     };
@@ -91,10 +93,10 @@ class Canvas:
 
     int getSizeX() const
     { return _size_x; }
-  
+
     int getSizeY() const
     { return _size_y; }
-  
+
     void setSizeX(int sx);
     void setSizeY(int sy);
 
index 77ddbce13a2ec09d457309671dd3fb310287ac0a..17dd5e0cfcd41a2aa9db4f02d9bb7c71fffc7a49 100644 (file)
@@ -43,7 +43,7 @@ class CullCallback:
     CullCallback(Canvas::CameraCullCallback* camera_cull);
 
   private:
-    Canvas::CameraCullCallback *_camera_cull;
+    Canvas::CameraCullCallbackWeakPtr _camera_cull;
 
     virtual bool cull( osg::NodeVisitor* nv,
                        osg::Drawable* drawable,
@@ -62,7 +62,8 @@ bool CullCallback::cull( osg::NodeVisitor* nv,
                          osg::Drawable* drawable,
                          osg::RenderInfo* renderInfo ) const
 {
-  _camera_cull->enableRendering();
+  if( _camera_cull.valid() )
+    _camera_cull->enableRendering();
 
   // TODO check if window/image should be culled
   return false;