[osg-users] removing texture from stateset

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


Hi Nickolov
use 

Code:
StateSet::setTextureAttribute(unit,0)


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=72750#72750







More information about the osg-users mailing list