[osg-users] Shaders with multiple views using ViewportCallback

Christoph Dohmen christoph.dohmen at cae.de
Mon May 14 00:08:34 PDT 2018

Hi Robert,

I just tried the uniform setting for the camera and it worked quite nice.
But I'm not able to use a callback to do the updating stuff :-(.

I tried to install this callback:


struct ViewportCallback : public osg::Uniform::Callback
    ViewportCallback( osg::Camera* camera )
                    : _camera( camera )
        std::cout << "ViewportCallback::ViewportCallback()" << std::endl;

    virtual void operator()( osg::Uniform* uniform, osg::NodeVisitor* /*nv*/)
        std::cout << "ViewportCallback::operator()" << std::endl;
        osg::Viewport * vp( _camera->getViewport() );
        uniform->set( osg::Vec4( vp->x(), vp->y(), vp->width(), vp->height() ) );

    osg::Camera* _camera;

and set it via


    osg::Viewport * vp( viewer.getCamera()->getViewport() );
    osg::Uniform * viewportUniform = new osg::Uniform( "viewport", osg::Vec4( vp->x(), vp->y(), vp->width(), vp->height() ) );
    viewportUniform->setUpdateCallback( new ViewportCallback( viewer.getCamera() ) );
    viewer.getCamera()->getOrCreateStateSet()->addUniform( viewportUniform );

But I don't get any output from operator() nor do I get an updated viewport value in my shader.

What's wrong with this?

Thank you!


Read this topic online here:

More information about the osg-users mailing list