Robert & Tim,

Thanks for the information and advice. I guess it's time to take some measurements and see what the cost of my draw callback actually is.

Cory



On 7/6/2010 5:13 PM, Tim Moore wrote:


On Tue, Jul 6, 2010 at 11:14 PM, Cory Riddell <c...@codeware.com> wrote:
Robert,

Thanks for the quick reply.

If I understand the NodeMask and CullMask, these would cull entire
nodes, not individual osg::Drawable instances, correct?
Yes, but you can store one Drawable per Geode node, or perhaps group of these Drawables that can be turned off into a single Geode. 

For example, I have geode's that contain a text label as one of their
drawables. I thought about using a switch node to toggle the text on and
off, but that seemed a bit heavy compared to a callback. With my draw
callback, I can easily turn labels on or off for the entire graph. The
penalty is that those drawables cannot use display lists.

That could be a stiff penalty. Using a node mask also saves OSG work in the cull and draw phases of the rendering loop.

Tim 
Cory

On 7/6/2010 3:16 PM, Robert Osfield wrote:
> Hi Cory,
>
> This is expected behaviour as the draw callback is nested within the
> code that sets up display lists, so once the display list is created
> it'll not call the callback again.  If you disable the use of display
> lists via drawable->setUseDisplayLists(false); then your callback will
> be called on every frame.
>
> Another approach you could take to switching on/off various subgraphs
> is to use a combination of NodeMask and CullMask.  Have a look at the
> osgstereoimage example for inspiration on this approach.
>
> Robert.
>
> On Tue, Jul 6, 2010 at 8:19 PM, Cory Riddell <c...@codeware.com> wrote:
>
>> I have a very simple draw callback defined that uses a bool to decide if
>> the drawable should be drawn. The body of the callback's
>> drawImplementation() looks like:
>>
>>  if (m_enable)
>>  {
>>    drawable->drawImplementation(renderInfo);
>>  }
>>
>> I have drawables scattered all over my scene that use the same instance
>> of this callback. By doing this, I'm able to toggle all of those
>> drawables on or off by setting a single bool.
>>
>> This only seems to work though if the drawable has display lists
>> disabled. My code to set the callback looks like:
>>
>>  drawable->setUseDisplayList(false);
>>  // callback is my shared callback instance
>>  drawable->setDrawCallback(callback);
>>
>> Is this expected behaviour? If I understand this correctly, to use
>> display lists, I would have to tell each drawable to recompile
>> (dirtyDisplayList()) whenever I toggle my m_enable bool. Since the whole
>> point of my shared draw callback is to avoid traversing my graph, doing
>> so would defeat the purpose of my callback. So, do I understand this
>> correctly?
>>
>> It looks like display lists can prevent a draw callback from being
>> called. Is that right?
>>
>> Cory
>>
>>
>>
>> _______________________________________________
>> osg-users mailing list
>> osg-users@lists.openscenegraph.org
>> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
>>
>>
> _______________________________________________
> osg-users mailing list
> osg-users@lists.openscenegraph.org
> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
>
>
_______________________________________________
osg-users mailing list
osg-users@lists.openscenegraph.org
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org

_______________________________________________ osg-users mailing list osg-users@lists.openscenegraph.org http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org


_______________________________________________
osg-users mailing list
osg-users@lists.openscenegraph.org
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org

Reply via email to