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

Reply via email to