[osg-users] Setting CullVisitor

Rafa Gaitan rafa.gaitan at gmail.com
Tue Nov 10 08:13:36 PST 2009


Hi Paul,

I think there is a better way to set your own visitor, maybe doing:

osgUtil::CullVisitor::prototype()=new MyVisitor();

if you do this before realize() (or run()), then the viewer uses the
prototype of the cull visitor.

Rafa.


On Tue, Nov 10, 2009 at 3:23 PM,  <paul1492 at yahoo.com> wrote:
> Thanks for the quick response...
>
> Did this:
>    render->getSceneView(0)->setCullVisitor(cv);
>    render->getSceneView(1)->setCullVisitor(cv);
>
> and now I'm getting:
> Warning:createOrReuseRenderLeaf() skipping multiply refrenced entry.
> Warning:createOrReuseRenderLeaf() skipping multiply refrenced entry.
> Warning:createOrReuseRenderLeaf() skipping multiply refrenced entry.
> Warning:createOrReuseRenderLeaf() skipping multiply refrenced entry.
>
> Paul P.
>
>
> ----- Original Message ----
> From: Jean-Sébastien Guay <jean-sebastien.guay at cm-labs.com>
> To: OpenSceneGraph Users <osg-users at lists.openscenegraph.org>
> Sent: Tue, November 10, 2009 8:57:38 AM
> Subject: Re: [osg-users] Setting CullVisitor
>
> Hi Paul,
>
>> Why do I have multiple SceneViews?
>
> There are always two SceneViews if you're using multithreading - they're used on alternating frames as you've seen. Just set your CullVisitor for both, or a separate instance of your CullVisitor for each instance.
>
> Whenever I've had to change something on SceneView instances, I had to do it on both instances. I expect if your CullVisitor has some local state, you'd have to use two separate instances, one for each SceneView, so that threading works correctly and doesn't try to modify data that's being read in another thread.
>
>> I need my own CullVisitor because I've defined my own node type that needs special cull handling.
>
> You could just override the traverse() method of your node type, that's how I normally do it. It keeps changes local to the overridden node class instead of propagating changes to other parts of the app.
>
>   void traverse(osg::NodeVisitor& nv)
>   {
>       if (nv.getVisitorType() == osg::NodeVisitor::CULL_VISITOR)
>       {
>           osgUtil::CullVisitor* cv =
>               dynamic_cast<osgUtil::CullVisitor*>(&nv);
>
>           // ...
>       }
>       osg::Node::traverse(nv);  // call base class version.
>       // (replace Node by whatever the base class of your overridden
>       //  node type is)
>   }
>
> Hope this helps,
>
> J-S
> -- ______________________________________________________
> Jean-Sebastien Guay    jean-sebastien.guay at cm-labs.com
>                               http://www.cm-labs.com/
>                         http://whitestar02.webhop.org/
> _______________________________________________
> osg-users mailing list
> osg-users at lists.openscenegraph.org
> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
>
>
>
>
> _______________________________________________
> osg-users mailing list
> osg-users at lists.openscenegraph.org
> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
>



-- 
Rafael Gaitán Linares
Instituto de Automática e Informática Industrial  http://www.ai2.upv.es
Ciudad Politécnica de la Innovación
Universidad Politécnica de Valencia


More information about the osg-users mailing list