From: Mikko Rasa Date: Sat, 5 Nov 2016 15:07:59 +0000 (+0200) Subject: Create a temporary context for calling wglGetProcAddress X-Git-Url: http://git.tdb.fi/?a=commitdiff_plain;h=c703f5b01bf5d7eeb13091e64109b58f5d12f53c;p=libs%2Fgui.git Create a temporary context for calling wglGetProcAddress --- diff --git a/source/graphics/wgl/glcontext.cpp b/source/graphics/wgl/glcontext.cpp index 98aabb3..35ec8e9 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); @@ -68,6 +71,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);