HI Morne, Ahh the missing bit of the jigsaw - that fact that you are using GraphicWindowEmbedded is key. The GraphicsContext::swapBuffers() is normally what does the swap buffers and then calls GraphicsContext::clear(), with GraphicsWindowEmbedded::swapBuffers() it's a non op, because there is no way it can do a swap buffers as it doesn't actually know about a real graphics context.
What you'll need to do in your own QT code is call GraphicsContext::clear() explicitly after the swap buffers or prior to calling frame()/renderingTraversals(); Robert. On Tue, Jan 27, 2009 at 12:44 PM, Morné Pistorius <mpistorius....@googlemail.com> wrote: > Hello again Robert, > > I modified the osgcompositeviewer example and setClearMask() works as > expected when creating a new graphics context with proper traits, etc. > > I suspect my problem comes from using the graphics context created by > osgViewer::GraphicsWindowEmbedded (this is the graphics context I pass > to my cameras) in our Qt app. It will take a bit of time to test my > theory, because I didn't build OSG with Qt support and need a proper > Qt install. I will do this now and see if I can reproduce the error > in osgviewerQt. I just thought I would mention it, maybe this hint > could shed some light on the problem. > > Cheers, > Morne > > > > > On Tue, Jan 27, 2009 at 11:43 AM, Morné Pistorius > <mpistorius....@googlemail.com> wrote: >> Not intentionally, no. I added >> >> pCamera->setClearMask( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ); >> >> to the camera attached to the view just to make sure, but it didn't >> change anything. It sounds like a bug then, I will try and recreate >> it in a simple example. >> >> Cheers, >> Morne >> >> >> On Tue, Jan 27, 2009 at 11:36 AM, Robert Osfield >> <robert.osfi...@gmail.com> wrote: >>> Hi Morne, >>> >>> I'm rather perplexed that it didn't just work. The clear of the >>> graphics context/window should be done before everything else runs, >>> the construction order should have no effect on this as it's a feature >>> hard-wired into GraphicsContext. Is there a chance that you've >>> disabled the clear of the colour and depth buffer for the cameras? >>> >>> Robert. >>> >>> On Tue, Jan 27, 2009 at 11:18 AM, Morné Pistorius >>> <mpistorius....@googlemail.com> wrote: >>>> Hi Robert, >>>> >>>> Thanks for the info. I had a look at the osgcamera example and >>>> changed my code to call >>>> >>>> getGraphicsWindow()->setClearColor(osg::Vec4f(0.0f,1.0f,0.0f,1.0f)); >>>> getGraphicsWindow()->setClearMask( GL_COLOR_BUFFER_BIT | >>>> GL_DEPTH_BUFFER_BIT) >>>> >>>> in the constructor of my derived osgViewer::CompositeViewer. This >>>> clears the viewer to green, but now none of my views show up inside >>>> the composite viewer, the whole viewer is just green. When I add a >>>> view, it is created like this: >>>> >>>> osgViewer::View * pView = new osgViewer::View; >>>> osg::Camera * pCamera = pView->getCamera(); >>>> >>>> pCamera->setGraphicsContext( getGraphicsWindow() ); >>>> pCamera->setClearColor( osg::Vec4( 0.05, 0.05, 0.2, 1.0 ) ) ; >>>> >>>> addView( pView ); >>>> >>>> ...compute viewport dimentions, etc... >>>> >>>> pCamera->setViewport( new osg::Viewport( Left, Bottom , >>>> BestWindowWidth, BestWindowHeight ) ); >>>> pCamera->setProjectionMatrixAsPerspective( 30.0f, double( >>>> BestWindowWidth ) / double( BestWindowHeight ), 1.0f, 10000.0f ); >>>> >>>> It is as if the call to clear the viewer comes after the call to >>>> render the views and I just see the cleared result. Removing the >>>> setClearColor/setClearMask in the constructor shows my views again. >>>> >>>> Is it necessary to create a new GraphicsContexts for the cameras as in >>>> the osgcameras example? I tried that, without success, so I guess I >>>> must be missing something else. Attached is what I see. >>>> >>>> Thanks again for the help! >>>> >>>> Regards, >>>> Morne >>>> >>>> >>>> On Mon, Jan 26, 2009 at 4:30 PM, Robert Osfield >>>> <robert.osfi...@gmail.com> wrote: >>>>> Hi Morne, >>>>> >>>>> This isn't a bug, rather a limitation of using camera's to clear the >>>>> background colour of the graphics context. If your camera's don't >>>>> cover the whole window then you have tell the GraphicsContext to do a >>>>> clear - something it doesn't do by default for efficiency reasons - as >>>>> the vast majority of apps have camera's covering the whole graphics >>>>> context. >>>>> >>>>> The osgcamera example has an example of enabling the clear of the >>>>> GraphicsContext. It's simply a case of doing a >>>>> window->setClearMask(..) and window->setClearColor(..); >>>>> >>>>> Robert. >>>>> >>>>> On Mon, Jan 26, 2009 at 4:20 PM, Morné Pistorius >>>>> <mpistorius....@googlemail.com> wrote: >>>>>> Hi guys, >>>>>> >>>>>> I am having trouble clearing the background on a composite viewer. I >>>>>> have a composite viewer derived from QGLWidget to which I add and >>>>>> remove views dynamically. The viewports are automatically tiled into a >>>>>> number of rows and columns inside the viewer window to make the best >>>>>> use of the available space, with a small gap between each view. >>>>>> >>>>>> My problem is that I can't clear the background of the composite >>>>>> viewer when I add/remove views. For example, if I had 4 views tiled >>>>>> in a 2x2 matrix, and remove one view, I my tiler keeps two views in >>>>>> the top row and 1 in the bottom row with an empty square where the >>>>>> fourth view was. Although the fourth view was removed, I still see >>>>>> some data drawn from the last frame that the removed viewer displayed. >>>>>> Also, the gaps between the views shows garbage. I attached two >>>>>> screenshots showing the problem. >>>>>> >>>>>> Is there something that I could call on the composite viewer to clear >>>>>> the entire window? It could also be a Qt problem, since the composite >>>>>> viewer is derived from QGLWidget. If I resize the window after >>>>>> removing the fourth view, then the background is cleared. I tried >>>>>> calling repaint()/paintGL() on the QtWidget, but that didn't help. >>>>>> >>>>>> I would appreciate pointers from people who have successfully used >>>>>> composite viewers with Qt before. >>>>>> >>>>>> Thanks a lot! >>>>>> >>>>>> Morne >>>>>> >>>>>> _______________________________________________ >>>>>> 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 > _______________________________________________ osg-users mailing list osg-users@lists.openscenegraph.org http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org