[osg-users] Viewer slaves and RTTs
Robert Osfield
robert.osfield at gmail.com
Sat Feb 18 05:25:53 PST 2017
Hi Johny,
Could you do as requested and create a small example, i.e. something
that others can compile and run to see what the problem is?
Extracting code from a wider program sometimes can be enough, but to
compile and test your program I'd need to write the extra code around
it to get a compilable program, I'd have to guess what types you are
using, guess what type of data you are assigning. With each guess
we'd need to make we add an extra variable to takes away from what you
are seeing on screen at your end so less chance of knowing what we see
is what you see.
As I said, the best way is create an example, there are plenty of OSG
examples that you could modify.
Robert.
On 18 February 2017 at 12:57, Johny Canes <petrussijsma at gmail.com> wrote:
> Okay,
>
>
> Code:
>
> // window / slave
> camera = new osg::Camera();
> osg::Viewport* viewport;
>
> /// {
> osg::ref_ptr<osg::GraphicsContext::Traits> traits = new osg::GraphicsContext::Traits;
> traits->x = 300 + 0;
> traits->y = 100 + 0;
> traits->width = nr::width;
> traits->height = nr::height;
> traits->windowDecoration = true;
> traits->doubleBuffer = true;
> traits->sharedContext = 0;
> traits->samples = 4; // MSAA
> traits->vsync = false;
>
> viewport = new osg::Viewport(0, 0, traits->width, traits->height);
>
> gc = osg::GraphicsContext::createGraphicsContext( traits.get() );
> gc->getState()->setUseModelViewAndProjectionUniforms( true );
> gc->getState()->setUseVertexAttributeAliasing( true );
>
> GLenum buffer = traits->doubleBuffer ? GL_BACK : GL_FRONT;
>
> camera = viewer.getCamera();
> camera->setName( "Main" );
> camera->setGraphicsContext( gc.get() );
>
> camera->setClearColor(osg::Vec4(1.0f, 0.0f, 0.0f, 1.0f));
> camera->setClearMask(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
>
> camera->setViewport( new osg::Viewport(0, 0, traits->width, traits->height) );
> //camera->getOrCreateStateSet()->setTextureAttributeAndModes( 0, texture, osg::StateAttribute::ON );
>
> camera->setDrawBuffer( buffer );
> camera->setReadBuffer( buffer );
> camera->setRenderOrder( osg::Camera::RenderOrder::PRE_RENDER );
> //camera->setRenderTargetImplementation( osg::Camera::FRAME_BUFFER_OBJECT );
>
> camera->attach( osg::Camera::COLOR_BUFFER0, texture );
> //camera->attach( osg::Camera::COLOR_BUFFER, texture, 0, 0, false, 0, 0 );
>
> //viewer.addSlave( camera, osg::Matrix(), osg::Matrix() );
>
> //viewer.setCamera( camera ); // unnecessary / messes up z-ordering ...
>
> //camera->addChild( root.get() );
> /// }
>
>
>
>
> This makes a window. I get it that a window is backed by a camera / GC.
>
> So naturally, since I'm using the original camera, my camera, 'Main', will render to its window. It would be ideal to turn this off, and only have this camera render to a hidden buffer (FBO?). Using a pbuffer / pbuffer-rtt is overkill and I'm not sure I understand that approach.
>
> Cheers,
> Johny
>
> ------------------
> Read this topic online here:
> http://forum.openscenegraph.org/viewtopic.php?p=70251#70251
>
>
>
>
>
> _______________________________________________
> osg-users mailing list
> osg-users at lists.openscenegraph.org
> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
More information about the osg-users
mailing list