Re: [osg-users] display lists draw callbacks

2010-07-06 Thread Robert Osfield
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


Re: [osg-users] display lists draw callbacks

2010-07-06 Thread Cory Riddell
Robert,

Thanks for the quick reply.

If I understand the NodeMask and CullMask, these would cull entire
nodes, not individual osg::Drawable instances, correct?

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.

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


Re: [osg-users] display lists draw callbacks

2010-07-06 Thread Tim Moore
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


Re: [osg-users] display lists draw callbacks

2010-07-06 Thread Cory Riddell




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