[osg-users] cullcallback and visitor ?

Vincent Bourdier vincent.bourdier at gmail.com
Mon Sep 29 06:52:29 PDT 2008


Hi

I make a little UP because I go now a strange problem :

My Cullcallback seem to engender some other problems in my application. When
I put it, the application can crash or freeze, pretending sometimes "not
enough memory" (false, I've checked) or some other error messages with no
relation with that. I suppose my cull callback is not good and randomly
engender unstable states in the application...

This is what I do, to check visible elements or not :

Callback :

tileVisibleCallback::tileVisibleCallback(Tile* tile)
>     : osg::NodeCallback(){
>     _tile = tile;
> };
>
> void tileVisibleCallback::operator()(osg::Node* node, osg::NodeVisitor*
> nv){
>
>     if(!_tile.valid()){
>         osg::notify(osg::WARN)<<"Tile callback error : tile not
> recognized!\n";
>         return;
>     }
>
>     //This method is called so the tile is visible
>     //    Its name is added to the visible Tile list.
>     _tile->_stack->_cullList.push_back(_tile->getName());
>
>
>     traverse(node, nv);
> };
>



and the Set :

osg::ref_ptr<tileVisibleCallback> tvc = new tileVisibleCallback(this);
>     if(_mainChild->getCullCallback())
>         _mainChild->getCullCallback()->setNestedCallback(tvc.get());
>     else
>         _mainChild->setCullCallback(tvc.get());
>

Do you see something not clear ? unstable ? what can engender problems ?

Thanks a lot.

Regards,
Vincent

2008/9/26 Vincent Bourdier <vincent.bourdier at gmail.com>

> Hi,
>
> I found an other solution using a vector to store the visible elements and
> clearing this list each render loop. I is the more simple solution I think.
>
> thanks for your help.
> Regards,
>    Vincent.
>
> 2008/9/26 Ulrich Hertlein <u.hertlein at sandbox.de>
>
>> Hi Vincent,
>>
>>
>> Vincent Bourdier wrote:
>> >> Vincent Bourdier wrote:
>> >>> If if do a nodevisitior, I've the problem that the operator() takes a
>> >>> nodevisitor in parameter and so I can't obtain the cull state with
>> that.
>> >>> (method isCulled() not aviable from a node visitor)
>> >> The way I understood Robert, the fact that your operator() is called
>> means
>> >> the node in
>> >> question is *not* culled so you could simple set your _isCulled=true.
>>  And
>> >> don't forget to call traverse().
>> >
>> > Ok, this is a simple and good way to have the result, but not sufficient
>> :
>> > cull = true when operator() is called, but if the operator is not
>> called,
>> > cull still = true and will never be false...
>>
>> Yes it will never be reset by the cull traversal so you have to do that
>> yourself e.g. just
>> before cull or maybe after you've read the cull state from your class.
>>
>> Cheers,
>> /ulrich
>>
>> _______________________________________________
>> osg-users mailing list
>> osg-users at lists.openscenegraph.org
>> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.openscenegraph.org/pipermail/osg-users-openscenegraph.org/attachments/20080929/f9c99f9e/attachment-0003.htm>


More information about the osg-users mailing list