Hi Chris,

On Sun, May 15, 2011 at 9:45 AM, SkullCheck <csklu...@gmail.com> wrote:
> I've dug into the OSG source code a bit and found the following:
>
> - special osg_* uniforms are maintained in the State class, the ones
> of interest are osg_ModelViewProjectionMatrix, osg_Vertex, etc

This are drop in replacements for the traditional gl_ variables that
are provided in
OpenGL 2.x's GLSL.  These replaements are required for GL3+ (with backwards
compatibility) and GLES 2 as neither provide the gl_ varaibles.  For a
GL 2.x app
it's safe to just target the gl_ variables.

> - the updating of these uniforms during draw traversal must be enabled
> by calling State::setUseModelViewAndProjectionUniforms(true)
>  I'm not quite sure where to set this though since States are used in
> multiple places, I've tried the following:
>
>    osgViewer::Viewer * viewer = new osgViewer::Viewer;
>    osgViewer::Renderer * renderer = dynamic_cast<osgViewer::Renderer
> *>(viewer->getCamera()->getRenderer());
>    osgUtil::SceneView * sceneView = renderer->getSceneView(0); // Do
> this also for 2nd sceneview
>    sceneView->setActiveUniforms( osgUtil::SceneView::ALL_UNIFORMS );
>    sceneView->getState()->setUseModelViewAndProjectionUniforms(true);

The osg::State object is held by the GraphicsContext, you don't need
to go chasing
up internal implementation details like SceneView.

If you have just one master camera that maintains the only one
graphics context the code is simply:

   osg::State* state = viewer.getCamera()->getGraphicsContext()->getState();

For the GL3 and GLES2 profiles the OSG automaitcally
setUseModelViewAndProjectionUniforms(true);


> - Modify the shader source to use the special osg_* built-in uniforms:
>
>    osg::ref_ptr<osg::State> state = new osg::State;
>    state->convertVertexShaderSourceToOsgBuiltIns( srcString );
>    shader->setShaderSource(srcString);
>
>   (Couldn't osg::State::convertVertexShaderSourceToOsgBuiltIns() be a
> static method or free function?)

This method is called when required, you never need to call it
yourself.  This method is purely there
to help with backwards compatibility between GL 2.x and GL3/GLES2 apps.

> But when I do this, then nothing appears. What am I doing wrong or are
> there other things I should be doing?

It does sound rather like you might be putting too much effort in, you
may well be able to
just use the standard gl_ built-ins.

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

Reply via email to