diff --git a/src/gallium/frontends/wgl/stw_ext_context.c b/src/gallium/frontends/wgl/stw_ext_context.c index fee498bf800..26dcd46e2cd 100644 --- a/src/gallium/frontends/wgl/stw_ext_context.c +++ b/src/gallium/frontends/wgl/stw_ext_context.c @@ -38,8 +38,22 @@ #include "util/u_debug.h" -wglCreateContext_t wglCreateContext_func = 0; -wglDeleteContext_t wglDeleteContext_func = 0; +static wglCreateContext_t wglCreateContext_func = 0; +static wglDeleteContext_t wglDeleteContext_func = 0; + +/* When this library is used as a opengl32.dll drop-in replacement, ensure we + * use the wglCreate/Destroy entrypoints above, and not the true opengl32.dll, + * which could happen if this library's name is not opengl32.dll exactly. + * + * For example, Qt 5.4 bundles this as opengl32sw.dll: + * https://blog.qt.io/blog/2014/11/27/qt-weekly-21-dynamic-opengl-implementation-loading-in-qt-5-4/ + */ +void +stw_override_opengl32_entry_points(wglCreateContext_t create, wglDeleteContext_t delete) +{ + wglCreateContext_func = create; + wglDeleteContext_func = delete; +} /** diff --git a/src/gallium/frontends/wgl/stw_ext_context.h b/src/gallium/frontends/wgl/stw_ext_context.h index d0337490436..3ef31913f52 100644 --- a/src/gallium/frontends/wgl/stw_ext_context.h +++ b/src/gallium/frontends/wgl/stw_ext_context.h @@ -32,7 +32,7 @@ typedef HGLRC (WINAPI *wglCreateContext_t)(HDC hdc); typedef BOOL (WINAPI *wglDeleteContext_t)(HGLRC hglrc); -extern wglCreateContext_t wglCreateContext_func; -extern wglDeleteContext_t wglDeleteContext_func; +extern void +stw_override_opengl32_entry_points(wglCreateContext_t create, wglDeleteContext_t delete); #endif /* STW_EXT_CONTEXT_H */ diff --git a/src/gallium/targets/libgl-gdi/stw_wgl.c b/src/gallium/targets/libgl-gdi/stw_wgl.c index 5f4cb7293fc..3b56fb59af4 100644 --- a/src/gallium/targets/libgl-gdi/stw_wgl.c +++ b/src/gallium/targets/libgl-gdi/stw_wgl.c @@ -48,10 +48,6 @@ #include "stw_wgl.h" #include "stw_ext_context.h" - -static void -overrideOpenGL32EntryPoints(void); - WINGDIAPI BOOL APIENTRY wglCopyContext( HGLRC hglrcSrc, @@ -67,7 +63,7 @@ WINGDIAPI HGLRC APIENTRY wglCreateContext( HDC hdc ) { - overrideOpenGL32EntryPoints(); + stw_override_opengl32_entry_points(&wglCreateContext, &wglDeleteContext); return (HGLRC)(UINT_PTR)DrvCreateContext(hdc); } @@ -76,7 +72,7 @@ wglCreateLayerContext( HDC hdc, int iLayerPlane ) { - overrideOpenGL32EntryPoints(); + stw_override_opengl32_entry_points(&wglCreateContext, &wglDeleteContext); return (HGLRC)(UINT_PTR)DrvCreateLayerContext( hdc, iLayerPlane ); } @@ -377,16 +373,3 @@ wglRealizeLayerPalette( } -/* When this library is used as a opengl32.dll drop-in replacement, ensure we - * use the wglCreate/Destroy entrypoints above, and not the true opengl32.dll, - * which could happen if this library's name is not opengl32.dll exactly. - * - * For example, Qt 5.4 bundles this as opengl32sw.dll: - * https://blog.qt.io/blog/2014/11/27/qt-weekly-21-dynamic-opengl-implementation-loading-in-qt-5-4/ - */ -static void -overrideOpenGL32EntryPoints(void) -{ - wglCreateContext_func = &wglCreateContext; - wglDeleteContext_func = &wglDeleteContext; -}