Hi Robert Thanks for this great hint! Really good one!
Cheers! Nick On Fri, Aug 26, 2016 at 6:27 PM, Robert Osfield <robert.osfi...@gmail.com> wrote: > 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 > -- trajce nikolov nick
_______________________________________________ osg-users mailing list osg-users@lists.openscenegraph.org http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org