[osg-users] removing texture from stateset

Julien Valentin julienvalentin51 at gmail.com
Sat Jan 13 13:02:02 PST 2018


oups i post too fast
I wanted to write

Code:
StateSet::removeTextureAttribute(unit,texatt)




mp3butcher wrote:
> Hi Nickolov
> use 
> 
> Code:
> StateSet::removeTextureAttribute(unit,texatt)
> 
> 
> to remove a texture.
> Moreover when you erase you iterator it invalidates it ...so don't do like this
> 
> Cheers
> 
> 
> 
> Trajce Nikolov NICK wrote:
> > Hi Community,
> > 
> > this should be simple, but I can not make it work. I have ive file with embedded texture and it is big file. All I want is to remove the texture and save it back. When I do this with the code bellow, and save the file, the file is not changing it's size. Any clue/hint?
> > 
> > 
> > Thanks a bunch as always!!!!
> > 
> > 
> > Nick
> > 
> > 
> > code
> > struct RemoveTextureVisitor : public osg::NodeVisitor 
> > {
> > 	RemoveTextureVisitor()
> > 		: osg::NodeVisitor(osg::NodeVisitor::TRAVERSE_ALL_CHILDREN)
> > 	{
> > 	}
> > 
> > 
> > 	virtual void apply(osg::Node& node)
> > 	{
> > 		osg::ref_ptr<osg::StateSet> ss = node.getStateSet();
> > 		if (ss.valid())
> > 		{
> > 			osg::StateSet::AttributeList& attrs = ss->getAttributeList();
> > 			osg::StateSet::AttributeList::iterator itr = attrs.begin();
> > 			for (; itr != attrs.end(); ++itr)
> > 			{
> > 				const osg::StateSet::RefAttributePair& attrp = itr->second;
> > 				const osg::ref_ptr<osg::StateAttribute>& attr = attrp.first;
> > 
> > 
> > 				osg::ref_ptr<osg::Texture2D> texture = dynamic_cast<osg::Texture2D*>(attr.get());
> > 				if (texture.valid())
> > 				{
> > 					attrs.erase(itr);
> > 					break;
> > 				}
> > 			}
> > 		}
> > 
> > 
> > 		traverse(node);
> > 	}
> > };
> > 
> > 
> > -- 
> > trajce nikolov nick
> > 
> >  ------------------
> > Post generated by Mail2Forum
> 


------------------
Read this topic online here:
http://forum.openscenegraph.org/viewtopic.php?p=72751#72751







More information about the osg-users mailing list