Hi Morne,

Thanks for the example.  This isn't a bug though, it's a limitation of
using GraphicsWindowEmbedded, just like you can't use
GraphicsWindowEmbedded for doing multi-threading or using it with
multiple windows, or having pbuffers used in the scene.

GraphicsWindowEmbedded is very limiting, only intended for basic
windowing integration, for full functionality you need to use a full
GraphicsWindow implementation.  There isn't much we can do to make
GraphicsWindowEmbedded work in the same way as a full GraphicsWindow,
as it'll require the ability to know about the underlying graphics
context, and to do this you end up having to implement a full
GraphicsWindow so it ceases to be this super easy to use class that
you can use off the shelf.

For most serious graphics apps you'll need to use a full
GraphicsWindow implementation, as JS mentions, even in the case of QT
it uses the window inheritance feature of GraphicsWindow enables you
to use QT and all of the full functionality of OSG.

Robert.

On Tue, Jan 27, 2009 at 1:45 PM, Morné Pistorius
<mpistorius....@googlemail.com> wrote:
> Hi Robert,
>
> As I expected, the problem lies with using a GraphicsWindowEmbedded.
> I was able to reproduce the bug in oagviewerQt by adding
>
>        
> viewerWindow->getGraphicsWindow()->setClearColor(osg::Vec4f(0.0f,1.0f,0.0f,1.0f));
>        viewerWindow->getGraphicsWindow()->setClearMask(
> GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
>
> to the composite viewer. Attached is the example recreating the bug.
>
> Cheers,
> Morne
>
> 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

Reply via email to