Re: [osg-users] Shader Update Latency?!

2017-02-11 Thread Johny Canes
Again,

Okay this is definitely not a bug, but it seems quite a common pitfall to say 
the least.

Instead of using viewer.frame(), which is a helper function that "calls 
advance(), eventTraversal(), updateTraversal(), renderingTraversals()" use the 
following.


Code:
viewer.advance();

viewer.eventTraversal();
viewer.updateTraversal();

updateShaders();

viewer.renderingTraversals();



This fixed my case of choppy shader updating, due to the slow viewmatrices 
update.

Cheers,
Johny

--
Read this topic online here:
http://forum.openscenegraph.org/viewtopic.php?p=70157#70157





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


Re: [osg-users] Shader Update Latency?!

2017-02-11 Thread Johny Canes
Hi,

This problem affects my shaders, since all my shaders rely on the correct view 
matrices.


robertosfield wrote:
> 
> By default the osgViewer::Viewer/CompositeViewer runs the update
> traversal before the camera matrices are set, this is done as camera
> manipulators might be tracking movement of nodes in the scene which
> are update in the update traversal so has to be run second.
> 
> One thing you could do is set the camera view matrix prior to the
> updateTraversal() method is called, or do the update of your Uniforms
> explicitly after the updateTraversal().


How can I run a function after this updateTraversal that you speak of?

Thank you!

Cheers,
Johny

--
Read this topic online here:
http://forum.openscenegraph.org/viewtopic.php?p=70156#70156





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


Re: [osg-users] Shader Update Latency?!

2011-01-12 Thread Robert Osfield
Hi Guo,

On Wed, Jan 12, 2011 at 7:04 AM, Guo Chow guo.c...@gmail.com wrote:
 I encounter a similar latency problem when I try to update a uniform using
 camera's view matrix in the uniform's callback. Since this uniform is needed
 to compute only once per frame, I decide to compute it on CPU before it's
 submitted to GPU.

 It seems that when the uniform's callback is called, the camera has not been
 updated yet, right?

 Currently I solve this problem by updating the uniform in a PreDrawCallback of
 the camera. But is this a graceful way to achieve it?

By default the osgViewer::Viewer/CompositeViewer runs the update
traversal before the camera matrices are set, this is done as camera
manipulators might be tracking movement of nodes in the scene which
are update in the update traversal so has to be run second.

One thing you could do is set the camera view matrix prior to the
updateTraversal() method is called, or do the update of your Uniforms
explicitly after the updateTraversal().

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


Re: [osg-users] Shader Update Latency?!

2011-01-11 Thread Guo Chow
Robert Osfield robert.osfi...@... writes:

 
 Hi Thorsten,
 
 By default the OSG computes the near/far planes on the fly during the
 cull traversal on every single frame.  You can disable this.
 Alternatively you could just use the gl_ProjectionMatrix directly on
 the GPU to get the near/far planes - this is how I'd do it, far more
 flexible and never needs any additional uniforms or callbacks.
 
 Robert.
 
 On Wed, Dec 1, 2010 at 6:15 PM, Thorsten Roth
 thorsten.r...@... wrote:
  Hi,
 
  I currently have a problem with a shader update callback I do not
  understand. I have a vertex and fragment shader which calculate linear 
depth
  in [0,1] for me, also respecting dynamic clipping planes. To achieve this, 
I
  pass zNear and zFar as uniform parameters to the shader. To have them
  updated, I have the following callback methods (zFar is looking
  accordingly):
 
  class UpdateShaderZNear: public osg::Uniform::Callback {
  public:
         virtual void operator()(osg::Uniform* uniform, osg::NodeVisitor* nv)
  {
                 double x, zNear;
         viewer-getCamera()-getProjectionMatrixAsPerspective(x,x,zNear,x);
                 uniform-set((float)zFar);
         }
  };
 
  Now when I move my camera towards and away from the object, it seems like
  the shader update is one frame (or so) too late, as I get values that do
  not correspond to the [0,1]-normalization and the problem disappears as 
soon
  as the camera stops.
 
  Is there any reason for that/does anyone have an idea what I'm doing wrong?
  If more information or code is necessary, just tell me 
 
  -Thorsten
  ___
  osg-users mailing list
  osg-us...@...
  http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
 
 

Hi Robert,

I encounter a similar latency problem when I try to update a uniform using 
camera's view matrix in the uniform's callback. Since this uniform is needed 
to compute only once per frame, I decide to compute it on CPU before it's 
submitted to GPU. 

It seems that when the uniform's callback is called, the camera has not been 
updated yet, right?

Currently I solve this problem by updating the uniform in a PreDrawCallback of 
the camera. But is this a graceful way to achieve it?

Thanks in advance.

Guo

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


[osg-users] Shader Update Latency?!

2010-12-01 Thread Thorsten Roth

Hi,

I currently have a problem with a shader update callback I do not 
understand. I have a vertex and fragment shader which calculate linear 
depth in [0,1] for me, also respecting dynamic clipping planes. To 
achieve this, I pass zNear and zFar as uniform parameters to the shader. 
To have them updated, I have the following callback methods (zFar is 
looking accordingly):


class UpdateShaderZNear: public osg::Uniform::Callback {
public:
virtual void operator()(osg::Uniform* uniform, osg::NodeVisitor* nv) {
double x, zNear;
viewer-getCamera()-getProjectionMatrixAsPerspective(x,x,zNear,x);
uniform-set((float)zFar);
}
};

Now when I move my camera towards and away from the object, it seems 
like the shader update is one frame (or so) too late, as I get values 
that do not correspond to the [0,1]-normalization and the problem 
disappears as soon as the camera stops.


Is there any reason for that/does anyone have an idea what I'm doing 
wrong? If more information or code is necessary, just tell me :-)


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


Re: [osg-users] Shader Update Latency?!

2010-12-01 Thread Tim Moore
Have you set the data variance of the Uniform object -- and the containing
StateSet object -- to Object::DYNAMIC?

Tim

On Wed, Dec 1, 2010 at 7:15 PM, Thorsten Roth thorsten.r...@alsvartr.dewrote:

 Hi,

 I currently have a problem with a shader update callback I do not
 understand. I have a vertex and fragment shader which calculate linear depth
 in [0,1] for me, also respecting dynamic clipping planes. To achieve this, I
 pass zNear and zFar as uniform parameters to the shader. To have them
 updated, I have the following callback methods (zFar is looking
 accordingly):

 class UpdateShaderZNear: public osg::Uniform::Callback {
 public:
virtual void operator()(osg::Uniform* uniform, osg::NodeVisitor* nv)
 {
double x, zNear;
viewer-getCamera()-getProjectionMatrixAsPerspective(x,x,zNear,x);
uniform-set((float)zFar);
}
 };

 Now when I move my camera towards and away from the object, it seems like
 the shader update is one frame (or so) too late, as I get values that do
 not correspond to the [0,1]-normalization and the problem disappears as soon
 as the camera stops.

 Is there any reason for that/does anyone have an idea what I'm doing wrong?
 If more information or code is necessary, just tell me :-)

 -Thorsten
 ___
 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] Shader Update Latency?!

2010-12-01 Thread Thorsten Roth

I have actually tried it now, but it made no difference :-(

-Thorsten

Am 01.12.2010 19:22, schrieb Tim Moore:

Have you set the data variance of the Uniform object -- and the
containing StateSet object -- to Object::DYNAMIC?

Tim

On Wed, Dec 1, 2010 at 7:15 PM, Thorsten Roth thorsten.r...@alsvartr.de
mailto:thorsten.r...@alsvartr.de wrote:

Hi,

I currently have a problem with a shader update callback I do not
understand. I have a vertex and fragment shader which calculate
linear depth in [0,1] for me, also respecting dynamic clipping
planes. To achieve this, I pass zNear and zFar as uniform parameters
to the shader. To have them updated, I have the following callback
methods (zFar is looking accordingly):

class UpdateShaderZNear: public osg::Uniform::Callback {
public:
virtual void operator()(osg::Uniform* uniform,
osg::NodeVisitor* nv) {
double x, zNear;

  viewer-getCamera()-getProjectionMatrixAsPerspective(x,x,zNear,x);
uniform-set((float)zFar);
}
};

Now when I move my camera towards and away from the object, it seems
like the shader update is one frame (or so) too late, as I get
values that do not correspond to the [0,1]-normalization and the
problem disappears as soon as the camera stops.

Is there any reason for that/does anyone have an idea what I'm doing
wrong? If more information or code is necessary, just tell me :-)

-Thorsten
___
osg-users mailing list
osg-users@lists.openscenegraph.org
mailto: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] Shader Update Latency?!

2010-12-01 Thread Robert Osfield
Hi Thorsten,

By default the OSG computes the near/far planes on the fly during the
cull traversal on every single frame.  You can disable this.
Alternatively you could just use the gl_ProjectionMatrix directly on
the GPU to get the near/far planes - this is how I'd do it, far more
flexible and never needs any additional uniforms or callbacks.

Robert.

On Wed, Dec 1, 2010 at 6:15 PM, Thorsten Roth thorsten.r...@alsvartr.de wrote:
 Hi,

 I currently have a problem with a shader update callback I do not
 understand. I have a vertex and fragment shader which calculate linear depth
 in [0,1] for me, also respecting dynamic clipping planes. To achieve this, I
 pass zNear and zFar as uniform parameters to the shader. To have them
 updated, I have the following callback methods (zFar is looking
 accordingly):

 class UpdateShaderZNear: public osg::Uniform::Callback {
 public:
        virtual void operator()(osg::Uniform* uniform, osg::NodeVisitor* nv)
 {
                double x, zNear;
        viewer-getCamera()-getProjectionMatrixAsPerspective(x,x,zNear,x);
                uniform-set((float)zFar);
        }
 };

 Now when I move my camera towards and away from the object, it seems like
 the shader update is one frame (or so) too late, as I get values that do
 not correspond to the [0,1]-normalization and the problem disappears as soon
 as the camera stops.

 Is there any reason for that/does anyone have an idea what I'm doing wrong?
 If more information or code is necessary, just tell me :-)

 -Thorsten
 ___
 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] Shader Update Latency?!

2010-12-01 Thread Thorsten Roth

Hi Robert,

thank you for this information. I did not know that I could do this, as 
I'm an absolute newbie concerning shader stuff and was happy that I just 
got it to work somehow ;)


I will try the approach with gl_ProjectionMatrix tomorrow, thank you :)

-Thorsten

Am 01.12.2010 20:51, schrieb Robert Osfield:

Hi Thorsten,

By default the OSG computes the near/far planes on the fly during the
cull traversal on every single frame.  You can disable this.
Alternatively you could just use the gl_ProjectionMatrix directly on
the GPU to get the near/far planes - this is how I'd do it, far more
flexible and never needs any additional uniforms or callbacks.

Robert.

On Wed, Dec 1, 2010 at 6:15 PM, Thorsten Roththorsten.r...@alsvartr.de  wrote:

Hi,

I currently have a problem with a shader update callback I do not
understand. I have a vertex and fragment shader which calculate linear depth
in [0,1] for me, also respecting dynamic clipping planes. To achieve this, I
pass zNear and zFar as uniform parameters to the shader. To have them
updated, I have the following callback methods (zFar is looking
accordingly):

class UpdateShaderZNear: public osg::Uniform::Callback {
public:
virtual void operator()(osg::Uniform* uniform, osg::NodeVisitor* nv)
{
double x, zNear;
viewer-getCamera()-getProjectionMatrixAsPerspective(x,x,zNear,x);
uniform-set((float)zFar);
}
};

Now when I move my camera towards and away from the object, it seems like
the shader update is one frame (or so) too late, as I get values that do
not correspond to the [0,1]-normalization and the problem disappears as soon
as the camera stops.

Is there any reason for that/does anyone have an idea what I'm doing wrong?
If more information or code is necessary, just tell me :-)

-Thorsten
___
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