X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fgraphics%2Fwgl%2Fglcontext.cpp;h=ebca3f1912ef9ee67e1570c41ae71e98c5cb281f;hb=4727c8ca14f2d278a74e0abe64b7a31e68238a8a;hp=98aabb310abb99f95356a6000f8997587d426ee6;hpb=8725353877bf558cca2cccef0acdbb5153c4553e;p=libs%2Fgui.git diff --git a/source/graphics/wgl/glcontext.cpp b/source/graphics/wgl/glcontext.cpp index 98aabb3..ebca3f1 100644 --- a/source/graphics/wgl/glcontext.cpp +++ b/source/graphics/wgl/glcontext.cpp @@ -45,7 +45,10 @@ void GLContext::platform_init(const GLOptions &opts) priv = new Private; if(opts.forward_compatible || opts.gl_version_major) { - PFNWGLCREATECONTEXTATTRIBSARBPROC wglCreateContextAttribs = reinterpret_cast(wglGetProcAddress("wglCreateContextAttribs")); + ContextHandle fake_context = wglCreateContext(dc); + wglMakeCurrent(dc, fake_context); + + PFNWGLCREATECONTEXTATTRIBSARBPROC wglCreateContextAttribs = reinterpret_cast(wglGetProcAddress("wglCreateContextAttribsARB")); if(!wglCreateContextAttribs) throw unsupported_gl_mode(opts); @@ -57,6 +60,12 @@ void GLContext::platform_init(const GLOptions &opts) ctx_attribs.push_back(WGL_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB); } + if(opts.core_profile) + { + ctx_attribs.push_back(WGL_CONTEXT_PROFILE_MASK_ARB); + ctx_attribs.push_back(WGL_CONTEXT_CORE_PROFILE_BIT_ARB); + } + if(opts.gl_version_major) { ctx_attribs.push_back(WGL_CONTEXT_MAJOR_VERSION_ARB); @@ -68,6 +77,11 @@ void GLContext::platform_init(const GLOptions &opts) ctx_attribs.push_back(0); priv->context = wglCreateContextAttribs(dc, 0, &ctx_attribs[0]); + if(!priv->context) + throw unsupported_gl_mode(opts); + + wglMakeCurrent(0, 0); + wglDeleteContext(fake_context); } else priv->context = wglCreateContext(dc);