Fixed handling in osgUtil::IncrementalCompileOperation/CompileSet/StateToCompile when the _markerObject is NULL.

This commit is contained in:
Robert Osfield 2016-08-15 12:56:57 +01:00
parent 7df7eb78ac
commit 192574958a

View File

@ -77,7 +77,7 @@ void StateToCompile::apply(osg::Drawable& drawable)
_drawablesHandled.insert(&drawable); _drawablesHandled.insert(&drawable);
if (_markerObject.get()!=drawable.getUserData()) if (!_markerObject || _markerObject.get()!=drawable.getUserData())
{ {
if (drawable.getDataVariance()!=osg::Object::STATIC) if (drawable.getDataVariance()!=osg::Object::STATIC)
{ {
@ -114,7 +114,7 @@ void StateToCompile::apply(osg::Drawable& drawable)
} }
// mark the drawable as visited // mark the drawable as visited
if (drawable.getUserData()==0) drawable.setUserData(_markerObject.get()); if (_markerObject.valid() && drawable.getUserData()==0) drawable.setUserData(_markerObject.get());
} }
} }
@ -125,15 +125,15 @@ void StateToCompile::apply(osg::StateSet& stateset)
_statesetsHandled.insert(&stateset); _statesetsHandled.insert(&stateset);
if ((_mode & GLObjectsVisitor::COMPILE_STATE_ATTRIBUTES)!=0 && if ((_mode & GLObjectsVisitor::COMPILE_STATE_ATTRIBUTES)!=0 &&
_markerObject.get()!=stateset.getUserData()) (!_markerObject || _markerObject.get()!=stateset.getUserData()))
{ {
osg::Program* program = dynamic_cast<osg::Program*>(stateset.getAttribute(osg::StateAttribute::PROGRAM)); osg::Program* program = dynamic_cast<osg::Program*>(stateset.getAttribute(osg::StateAttribute::PROGRAM));
if (program && _markerObject.get()!=program->getUserData()) if (program && (!_markerObject || _markerObject.get()!=program->getUserData()))
{ {
_programs.insert(program); _programs.insert(program);
// mark the stateset as visited // mark the stateset as visited
if (program->getUserData()==0) program->setUserData(_markerObject.get()); if (_markerObject.valid() && program->getUserData()==0) program->setUserData(_markerObject.get());
} }
const osg::StateSet::TextureAttributeList& tal = stateset.getTextureAttributeList(); const osg::StateSet::TextureAttributeList& tal = stateset.getTextureAttributeList();
@ -159,14 +159,14 @@ void StateToCompile::apply(osg::StateSet& stateset)
} }
// mark the stateset as visited // mark the stateset as visited
if (stateset.getUserData()==0) stateset.setUserData(_markerObject.get()); if (_markerObject.valid() && stateset.getUserData()==0) stateset.setUserData(_markerObject.get());
} }
} }
void StateToCompile::apply(osg::Texture& texture) void StateToCompile::apply(osg::Texture& texture)
{ {
// don't make any changes if Texture already processed // don't make any changes if Texture already processed
if (_markerObject.get()==texture.getUserData()) return; if (_markerObject.valid() && _markerObject.get()==texture.getUserData()) return;
if (_assignPBOToImages) if (_assignPBOToImages)
{ {
@ -213,7 +213,7 @@ void StateToCompile::apply(osg::Texture& texture)
} }
} }
if (texture.getUserData()==0) texture.setUserData(_markerObject.get()); if (_markerObject.valid() && texture.getUserData()==0) texture.setUserData(_markerObject.get());
_textures.insert(&texture); _textures.insert(&texture);
} }