From 82d5c605e5c88a575c326deb2ba7818679cbdae8 Mon Sep 17 00:00:00 2001 From: Thomas Geymayer Date: Sun, 15 Jun 2014 16:30:57 +0200 Subject: [PATCH] canvas::Element: check if element is valid. --- simgear/canvas/elements/CanvasElement.cxx | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/simgear/canvas/elements/CanvasElement.cxx b/simgear/canvas/elements/CanvasElement.cxx index d67ba4f2..98f93343 100644 --- a/simgear/canvas/elements/CanvasElement.cxx +++ b/simgear/canvas/elements/CanvasElement.cxx @@ -229,7 +229,7 @@ namespace canvas if( dt == 0 && _drawable ) _drawable->getBound(); - if( _attributes_dirty & BLEND_FUNC ) + if( (_attributes_dirty & BLEND_FUNC) && _transform.valid() ) { parseBlendFunc( _transform->getOrCreateStateSet(), @@ -512,9 +512,13 @@ namespace canvas //---------------------------------------------------------------------------- void Element::setClip(const std::string& clip) { + osg::StateSet* ss = getOrCreateStateSet(); + if( !ss ) + return; + if( clip.empty() || clip == "auto" ) { - getOrCreateStateSet()->removeAttribute(osg::StateAttribute::SCISSOR); + ss->removeAttribute(osg::StateAttribute::SCISSOR); _scissor = 0; return; } @@ -576,7 +580,7 @@ namespace canvas else _scissor->_coord_reference = GLOBAL; - getOrCreateStateSet()->setAttributeAndModes(_scissor); + ss->setAttributeAndModes(_scissor); } //---------------------------------------------------------------------------- @@ -821,8 +825,12 @@ namespace canvas //---------------------------------------------------------------------------- osg::StateSet* Element::getOrCreateStateSet() { - return _drawable ? _drawable->getOrCreateStateSet() - : _transform->getOrCreateStateSet(); + if( _drawable.valid() ) + return _drawable->getOrCreateStateSet(); + if( _transform.valid() ) + return _transform->getOrCreateStateSet(); + + return 0; } //---------------------------------------------------------------------------- -- 2.39.5