On 21.08.2017 18:34, Robert Osfield wrote:
Hi Sandro,

On 21 August 2017 at 17:21, Sandro Mani <[email protected] <mailto:[email protected]>> wrote:

    Are you building the OSG with defaults?  Or are you building the
    OSG for just GL3?
    %cmake -DBUILD_OSG_EXAMPLES=ON -DBUILD_DOCUMENTATION=ON
    -DOSG_GL1_AVAILABLE=ON -DOSG_GL2_AVAILABLE=ON
    -DOPENGL_PROFILE=GLCORE -DOPENGL_HEADER1="#include <GL/gl.h>"


That's a bit of ugly mix.
Agreed, I didn't put much though into it, I just checked that I hit the OSG_GL3_FEATURES when doing the work on the context.
Things should work with just:

cmake .
make -j 4   # 4 is number of cores available

When you using the OPENGL_PROFILE it'll set the OSG_*_AVAILABLE options for you, but in general build with defaults unless you specifically need a particular feature set.
Well, in this case I needed it though, right? I mean, OPENGL_PROFILE defaults to "GL2".


    What viewer are using with osgEarth? osgEarth itself is typically
    used as NodeKit with end user application creating their own
    viewer and with it graphics contexts.  This means even if
    osgEarth's own example programs changed the way they create
    graphics context you'd end up with issues.
    Running with osgearth_viewer, I get two calls to
    osgViewer::GraphicsWindowX11::init. The first one where, I assume,
    it tries to determine the capabilities of hardware/driver in use,
    and this calls Traits without a DisplaySettings instance:

    #0  osgViewer::GraphicsWindowX11::init (this=this@entry=0x1004ad330)
        at
    
/usr/src/debug/OpenSceneGraph-3.5.7-0.2.gitbfbaeca.fc27.x86_64/src/osgViewer/GraphicsWindowX11.cpp:915
    #1  0x00007f3e23ae4b50 in
    osgViewer::GraphicsWindowX11::GraphicsWindowX11
    (traits=0x1003760d0, this=<optimized out>)
        at
    
/usr/src/debug/OpenSceneGraph-3.5.7-0.2.gitbfbaeca.fc27.x86_64/include/osgViewer/api/X11/GraphicsWindowX11:56
    #2  X11WindowingSystemInterface::createGraphicsContext
    (this=<optimized out>, traits=0x1003760d0)
        at
    
/usr/src/debug/OpenSceneGraph-3.5.7-0.2.gitbfbaeca.fc27.x86_64/src/osgViewer/GraphicsWindowX11.cpp:2269
    #3  0x00007f3e241e81b7 in
    osg::GraphicsContext::createGraphicsContext
    (traits=traits@entry=0x1003760d0)
        at
    
/usr/src/debug/OpenSceneGraph-3.5.7-0.2.gitbfbaeca.fc27.x86_64/src/osg/GraphicsContext.cpp:128
    #4  0x00007f3e2350c256 in MyGraphicsContext::MyGraphicsContext
    (this=<synthetic pointer>)
        at
    
/usr/src/debug/osgearth-2.9-0.2.git43d4ba5.fc27.x86_64/src/osgEarth/Capabilities.cpp:76
    #5  osgEarth::Capabilities::Capabilities (this=0x100390f30)
        at
    
/usr/src/debug/osgearth-2.9-0.2.git43d4ba5.fc27.x86_64/src/osgEarth/Capabilities.cpp:162
    #6  0x00007f3e236897a5 in osgEarth::Registry::initCapabilities
    (this=0x1002a7af0)
        at
    
/usr/src/debug/osgearth-2.9-0.2.git43d4ba5.fc27.x86_64/src/osgEarth/Registry.cpp:484
    #7  0x00007f3e23689829 in osgEarth::Registry::getCapabilities
    (this=0x1002a7af0)
        at
    
/usr/src/debug/osgearth-2.9-0.2.git43d4ba5.fc27.x86_64/src/osgEarth/Registry.cpp:468
    #8  0x00007f3dfa209486 in osgEarth::Registry::capabilities ()
        at
    
/usr/src/debug/osgearth-2.9-0.2.git43d4ba5.fc27.x86_64/src/osgEarth/Registry:149
    #9
    osgEarth::Drivers::MPTerrainEngine::MPTerrainEngineNode::MPTerrainEngineNode
    (this=0x100a1ac60)
        at
    
/usr/src/debug/osgearth-2.9-0.2.git43d4ba5.fc27.x86_64/src/osgEarthDrivers/engine_mp/MPTerrainEngineNode.cpp:202
    [...]

    Then, a second time here:

    #0  osgViewer::GraphicsWindowX11::init (this=this@entry=0x100676840)
        at
    
/usr/src/debug/OpenSceneGraph-3.5.7-0.2.gitbfbaeca.fc27.x86_64/src/osgViewer/GraphicsWindowX11.cpp:915
    #1  0x00007f3e23ae4b50 in
    osgViewer::GraphicsWindowX11::GraphicsWindowX11
    (traits=0x10052c100, this=<optimized out>)
        at
    
/usr/src/debug/OpenSceneGraph-3.5.7-0.2.gitbfbaeca.fc27.x86_64/include/osgViewer/api/X11/GraphicsWindowX11:56
    #2  X11WindowingSystemInterface::createGraphicsContext
    (this=<optimized out>, traits=0x10052c100)
        at
    
/usr/src/debug/OpenSceneGraph-3.5.7-0.2.gitbfbaeca.fc27.x86_64/src/osgViewer/GraphicsWindowX11.cpp:2269
    #3  0x00007f3e241e81b7 in
    osg::GraphicsContext::createGraphicsContext
    (traits=traits@entry=0x10052c100)
        at
    
/usr/src/debug/OpenSceneGraph-3.5.7-0.2.gitbfbaeca.fc27.x86_64/src/osg/GraphicsContext.cpp:128
    #4  0x00007f3e23a7ab62 in osgViewer::SingleWindow::configure
    (this=0x100a2a370, view=...)
        at
    
/usr/src/debug/OpenSceneGraph-3.5.7-0.2.gitbfbaeca.fc27.x86_64/src/osgViewer/config/SingleWindow.cpp:72
    #5  0x00007f3e23a7a80a in osgViewer::SingleScreen::configure
    (this=<optimized out>, view=...)
        at
    
/usr/src/debug/OpenSceneGraph-3.5.7-0.2.gitbfbaeca.fc27.x86_64/src/osgViewer/config/SingleScreen.cpp:29
    #6  0x00007f3e23a75207 in osgViewer::AcrossAllScreens::configure
    (this=<optimized out>, view=...)
        at
    
/usr/src/debug/OpenSceneGraph-3.5.7-0.2.gitbfbaeca.fc27.x86_64/src/osgViewer/config/AcrossAllScreens.cpp:48
    #7  0x00007f3e23ab79c2 in osgViewer::View::apply
    (this=0x7fffffffdb00, config=0x1002a3770)
        at
    
/usr/src/debug/OpenSceneGraph-3.5.7-0.2.gitbfbaeca.fc27.x86_64/src/osgViewer/View.cpp:456
    #8  0x00007f3e23ab7b00 in
    osgViewer::View::setUpViewAcrossAllScreens (this=<optimized out>)
        at
    
/usr/src/debug/OpenSceneGraph-3.5.7-0.2.gitbfbaeca.fc27.x86_64/src/osgViewer/View.cpp:463
    [...]

    using ViewAcrossAllScreens as you anticipated and hence the
    default DisplaySettings. Since by default a "1.0" context is
    created, the result is:

    FRAGMENT glCompileShader "main(fragment)" FAILED
    FRAGMENT Shader "main(fragment)" infolog:
    0:1(10): error: GLSL 3.30 is not supported. Supported versions
    are: 1.10, 1.20, 1.30, 1.00 ES, 3.00 ES, 3.10 ES, and 3.20 ES

    etc.

    If I add

    osg::DisplaySettings::instance()->setGLContextVersion( "4.0" );
    osg::DisplaySettings::instance()->setGLContextProfileMask( 0x1 );

    at the beginning of a tweaked osgearth_viewer.cpp@main, things
    work (though possibly osgEarth::Capabilities::Capabilities will
    have incorrectly determined some things since a "1.0" context was
    created there). The same effect can indeed be achieved by using
    the environment variables you mention.


Try using the OSG_GL_CONTEXT_VERSION and OSG_GL_CONTEXT_PROFILE_MASK env vars instead of the above DisplaySettings::instance() code i,e,

export OSG_GL_CONTEXT_VERSION=4.0
export OSG_GL_CONTEXT_PROFILE_MASK=1
Yes as mentioned this also works. But the open issue for me still remains the first context created by osgEarth::Capabilities:: Capabilities (see first of the stack traces I posted above). In my view either this is a bug in osgEarth that it creates the traits without honouring the desired GL version, or OSG should otherwise ensure the traits contain the overridden GL version.

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

Reply via email to