Hi Phil,

this worked for me in the past: check your project settings, "Symbols hidden By default" should be deactivated for both osg and your project.

cheers,

Stephan


Am 07.02.13 05:34, schrieb Philip Lamb:
Hi all,

I'm running into an interesting bug in my code which manifests as behaviour that works on one platform (Windows) and not on another (OS X) with the same OSG code. (Using OSG trunk, around 3.1.4)

I am using the following node visitor to reset animations attached to transform nodes:

class ResetAnimationNodesVisitor : public osg::NodeVisitor
{
public:


    ResetAnimationNodesVisitor():
osg::NodeVisitor(osg::NodeVisitor::TRAVERSE_ALL_CHILDREN) {}


virtual void apply(osg::Transform& transform)
    {
osg::NodeCallback *nc = transform.getUpdateCallback();
osg::AnimationPathCallback* apc = dynamic_cast<osg::AnimationPathCallback*>(nc);
if (apc) {
apc->reset();
            apc->update(transform);
        }
traverse(transform);
    }
};

This visitor is instantiated on a node thus:

void resetAnimationTime(osg::ref_ptr<osg::Node> modelNode)
{
ResetAnimationNodesVisitor ranv;
modelNode->accept(ranv);
}

When compiled and run on an animated model under Windows (compiled with Visual Studio 2010 SP1) all works as expected. When the exact same code is compiled and run under OS X (using Xcode 4.5.2, with LLVM 4.2.1) the dynamic cast to osg::AnimationPathCallback* is always NULL.

I have checked that RTTI is not disabled (it's on by default, and no errors are produced by the dynamic_cast<>, and that indeed things are as expected with this snippet inside apply():

if (nc) osg::notify(osg::NOTICE) << "UpdateCallback: className is " << std::string(transform.getUpdateCallback()->className()) << " and type_id.name() is " typeid(transform.getUpdateCallback()).name() << std::endl;

which produces the output:

UpdateCallback: className is AnimationPathCallback and type_id.name() is PN3osg12NodeCallbackE

So it looks like a failure somewhere in RTTI. Both typeid and the dynamic_cast<> fail to convert the osg::NodeCallback* to an osg::AnimationPathCallback*. Yet clearly, the callback IS the right type, as evidenced by OSG's className() function's output.

Any ideas about where this kind of issue might be coming from?

Regards,
Phil.


_______________________________________________
osg-users mailing list
[email protected]
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org

_______________________________________________
osg-users mailing list
[email protected]
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org

Reply via email to