Hi Robert,

Thanks for the comprehensive reply, I think I've done what you suggested but it 
doesn't appear to have changed anything.

This application uses osggtkdrawingarea which I've modified to work with 
GtkGLArea.

The viewer is added like so:

class OSGGTKDrawingArea : public osgViewer::Viewer {
osg::ref_ptr<osgViewer::GraphicsWindowEmbedded> _gw;

...
}

_gw = setUpViewerAsEmbeddedInWindow(0, 0, width, height);

and in the realise callback I've added this:

getCamera()->setGraphicsContext(_gw);
    getCamera()->getOrCreateStateSet()->setGlobalDefaults();

I even tried explicitly setting depth test

getCamera()->getOrCreateStateSet()->setMode( GL_DEPTH_TEST, 
osg::StateAttribute::ON );

Still no joy.

I turned on GL_CULL_FACE just to check and it did what I expected so setting 
the camera attributes appears to be working.

Anything else you can think of tat I can try?

Cheers,


On Mon, 2020-09-07 at 09:12 +0100, OpenSceneGraph Users wrote:
Hi Franco,

Posting screenshots is fine, and exactly the thing to do with these types of 
problems.

It's not possible to diagnose the exact problem you are seeing with rendering 
under OSG-3.6.5.  Broadly it looks like a depth test issue.

I don't know if this is relevant, but will mention it as some others have been 
caught out by it. One of the bug fixes in the OSG-3.x series was to fix an 
override of the osg::Camera settings that was causing applications settings to 
be lost.  The fix had the side effect of revealing missing settings, in essence 
it was a bug A that hide a bug B that only occurred with certain usage models.

So bug A has been fixed and bug B usage case is an application creates a viewer 
osg::Camera, sets up a graphics context, then just directly assigns it to the 
viewer without setting any global state that is required for top level 
osg::Camera.  The state not set includes GL_DEPTH_TEST - which is where there 
"might" be an overlap with the problem you see with your application.

Normal OSG usage where you use the Viewer Camera's that are assigned by default 
also call StateSet::setGlobalDefaults() on this StateSet, so you never see a 
problem.  All the OSG examples provided in the OpenSceneGraph distribution do 
this.

However, the problem usage cause was something that was done in early osgQt 
based examples - they created a local osg::Camera assigned to the viewer and 
never called StateSet::setGlobalDefaults() on the osg::Camera's StateSet.   
These examples used to work fine, even with this ill defined state because of 
Bug A.  If you copied one of these examples then you'll inherit this bug B 
usage case.

If this is the case then can either:

    1) Just use the viewer(views) Camera via Viewer/View::getCamera() to get 
the Camera to assign the GraphicsContext to, so utilize the default settings.
    2) Call:  camera->getOrCreateStateSet()->setGlobalDefaults() on the locally 
created Camera before it's assigned to the View(er).

There was a lot of discussion about this problem usage case and the solution 
when bug A was fixed and bug B revealed, but that's quite a few years ago now - 
had your software been updated more regularly it's likely you'll have seen 
discussions.

Cheers,
Robert.

_______________________________________________

osg-users mailing list

[email protected]<mailto:[email protected]>

http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org

_______________________________________________
osg-users mailing list
[email protected]
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org

Reply via email to