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);
#include <simgear/props/propertyObject.hxx>
#include <osg/NodeCallback>
+#include <osg/observer_ptr>
#include <memory>
#include <string>
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
CullCallback(CameraCullCallback* camera_cull);
private:
- CameraCullCallback *_camera_cull;
+ CameraCullCallbackWeakPtr _camera_cull;
virtual void operator()(osg::Node* node, osg::NodeVisitor* nv);
};
int getSizeX() const
{ return _size_x; }
-
+
int getSizeY() const
{ return _size_y; }
-
+
void setSizeX(int sx);
void setSizeY(int sy);
CullCallback(Canvas::CameraCullCallback* camera_cull);
private:
- Canvas::CameraCullCallback *_camera_cull;
+ Canvas::CameraCullCallbackWeakPtr _camera_cull;
virtual bool cull( osg::NodeVisitor* nv,
osg::Drawable* drawable,
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;