X-Git-Url: http://git.tdb.fi/?p=libs%2Fgui.git;a=blobdiff_plain;f=source%2Fgraphics%2Fglx%2Fglcontext.cpp;h=34daa08d1ce1e022648626ac9279d1ab771e7f2a;hp=3ee8865d7559e0890df797cb79ef893097f50847;hb=be455be47a214f8fba1224ef1fb4158a073bc4e3;hpb=0d205a19dc087768da1e803d8dfde27f12cb9d99 diff --git a/source/graphics/glx/glcontext.cpp b/source/graphics/glx/glcontext.cpp index 3ee8865..34daa08 100644 --- a/source/graphics/glx/glcontext.cpp +++ b/source/graphics/glx/glcontext.cpp @@ -2,6 +2,7 @@ #include #include #include +#include #include #include "glcontext.h" #include "display_private.h" @@ -98,11 +99,32 @@ void GLContext::platform_init(const GLOptions &opts) priv->glxwnd = glXCreateWindow(dpy, fb_configs[0], priv->subwnd, 0); - if(opts.forward_compatible || opts.gl_version_major) + if(opts.forward_compatible || opts.gl_version_major!=GLOptions::DEFAULT_VERSION) { if(!extensions.count("GLX_ARB_create_context") || !extensions.count("GLX_ARB_get_proc_address")) throw unsupported_gl_mode(opts); + unsigned gl_version_major = opts.gl_version_major; + unsigned gl_version_minor = opts.gl_version_minor; + if(opts.gl_version_major==GLOptions::LATEST_VERSION) + { + ContextHandle probe_context = glXCreateNewContext(dpy, fb_configs[0], GLX_RGBA_TYPE, 0, true); + glXMakeContextCurrent(dpy, priv->glxwnd, priv->glxwnd, probe_context); + + const char *gl_ver_ptr = reinterpret_cast(glGetString(GL_VERSION)); + if(!gl_ver_ptr) + throw unsupported_gl_mode(opts); + + string gl_ver = gl_ver_ptr; + vector parts = split(gl_ver.substr(0, gl_ver.find(' ')), '.'); + + gl_version_major = lexical_cast(parts[0]); + gl_version_minor = lexical_cast(parts[1]); + + glXMakeContextCurrent(dpy, 0, 0, 0); + glXDestroyContext(dpy, probe_context); + } + vector ctx_attribs; ctx_attribs.push_back(GLX_RENDER_TYPE); @@ -123,9 +145,9 @@ void GLContext::platform_init(const GLOptions &opts) if(opts.gl_version_major) { ctx_attribs.push_back(GLX_CONTEXT_MAJOR_VERSION_ARB); - ctx_attribs.push_back(opts.gl_version_major); + ctx_attribs.push_back(gl_version_major); ctx_attribs.push_back(GLX_CONTEXT_MINOR_VERSION_ARB); - ctx_attribs.push_back(opts.gl_version_minor); + ctx_attribs.push_back(gl_version_minor); } ctx_attribs.push_back(0);