On 26 August 2016 at 17:13, Trajce Nikolov NICK <trajce.nikolov.n...@gmail.com> wrote: > Ok :-) .. I will answer it too ..... > > I am working with older version of osg where the Geometry was still not > inherited from Node so I had to apply a special case for Geodes ... Sorry > for the noise ;-)
Glad to hear you spotted the problem. One thing that jumped out at me when I read the code was that you call getOrCreateStateSet(), this might simplify the code but is terribly inefficient for both this traversal and any subsequent use of the scene graph as it will force the creation of StateSet's for all nodes in the scene graph. Most nodes in a scene graph should never need a StateSet so you certainly don't want to go around assigning empty ones. What a better check would be: void apply(osg::Node& node) { if (node.getStateSet()) apply(*node.getStateSet())l } void apply(osg::StateSet& stateset) { osg::StateAttribute* attr = stateset>getAttribute(osg::StateAttribute::MATERIAL); if (attr) { std::cout << "ATTRIBUTE: " << attr->getName() << std::endl; osg::Material* material = dynamic_cast<osg::Material*>(attr); if (material && (material->getName() != "@RootMaterial@")) { std::cout << "MATERIAL: " << material->getName() << std::endl; } } } _______________________________________________ osg-users mailing list osg-users@lists.openscenegraph.org http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org