From: Thomas Geymayer Date: Sun, 15 Jun 2014 14:30:57 +0000 (+0200) Subject: canvas::Element: check if element is valid. X-Git-Url: https://git.mxchange.org/?a=commitdiff_plain;h=82d5c605e5c88a575c326deb2ba7818679cbdae8;p=simgear.git canvas::Element: check if element is valid. --- 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; } //----------------------------------------------------------------------------