From bea484e12f98f67eafafeb8db6d3181020fdfb46 Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Sat, 18 Jan 2014 14:10:24 +0000 Subject: [PATCH] Move Win32 specific function grabbing fallback to WGL.cpp. Fixes issue 6964. --- Source/Core/DolphinWX/GLInterface/WGL.cpp | 10 +++++++++- .../OGL/GLExtensions/GLExtensions.cpp | 14 +------------- 2 files changed, 10 insertions(+), 14 deletions(-) diff --git a/Source/Core/DolphinWX/GLInterface/WGL.cpp b/Source/Core/DolphinWX/GLInterface/WGL.cpp index 8bc9e7a73a..afc67da431 100644 --- a/Source/Core/DolphinWX/GLInterface/WGL.cpp +++ b/Source/Core/DolphinWX/GLInterface/WGL.cpp @@ -13,6 +13,7 @@ #include "EmuWindow.h" static HDC hDC = NULL; // Private GDI Device Context static HGLRC hRC = NULL; // Permanent Rendering Context +static HINSTANCE dllHandle = NULL; // Handle to OpenGL32.dll // typedef from wglext.h typedef BOOL(WINAPI * PFNWGLSWAPINTERVALEXTPROC) (int interval); @@ -32,7 +33,10 @@ void cInterfaceWGL::Swap() void* cInterfaceWGL::GetProcAddress(std::string name) { - return (void*)wglGetProcAddress((LPCSTR)name.c_str()); + void* func = (void*)wglGetProcAddress((LPCSTR)name.c_str()); + if (func == NULL) + func = (void*)GetProcAddress(dllHandle, (LPCSTR)name.c_str()); + return func; } // Draw messages on top of the screen @@ -69,6 +73,10 @@ bool cInterfaceWGL::Create(void *&window_handle) s_backbuffer_width = _twidth; s_backbuffer_height = _theight; +#ifdef _WIN32 + dllHandle = LoadLibrary(TEXT("OpenGL32.dll")); +#endif + window_handle = (void*)EmuWindow::Create((HWND)window_handle, GetModuleHandle(0), _T("Please wait...")); if (window_handle == NULL) { diff --git a/Source/Core/VideoBackends/OGL/GLExtensions/GLExtensions.cpp b/Source/Core/VideoBackends/OGL/GLExtensions/GLExtensions.cpp index 68803eb3a8..d8c7a416e5 100644 --- a/Source/Core/VideoBackends/OGL/GLExtensions/GLExtensions.cpp +++ b/Source/Core/VideoBackends/OGL/GLExtensions/GLExtensions.cpp @@ -8,9 +8,6 @@ #if defined(__linux__) || defined(__APPLE__) #include #endif -#ifdef _WIN32 -#include -#endif #include // gl_1_1 @@ -779,9 +776,6 @@ namespace GLExtensions bool _isES3; bool _isES; u32 _GLVersion; -#ifdef _WIN32 - HINSTANCE dllHandle = NULL; -#endif std::unordered_map _extensionlist; // Forward declared init functions bool init_gl_1_1(); @@ -954,10 +948,6 @@ namespace GLExtensions #if defined(__linux__) || defined(__APPLE__) // Give it a second try with dlsym *func = dlsym(RTLD_NEXT, name.c_str()); -#endif -#ifdef _WIN32 - if (*func == NULL) - *func = (void*)GetProcAddress(dllHandle, (LPCSTR)name.c_str()); #endif if (*func == NULL && _isES) *func = (void*)0xFFFFFFFF; // Easy to determine invalid function, just so we continue on @@ -979,9 +969,7 @@ namespace GLExtensions bool success = true; _isES3 = GLInterface->GetMode() == GLInterfaceMode::MODE_OPENGLES3; _isES = GLInterface->GetMode() == GLInterfaceMode::MODE_OPENGLES3 || GLInterface->GetMode() == GLInterfaceMode::MODE_OPENGLES2; -#ifdef _WIN32 - dllHandle = LoadLibrary(TEXT("OpenGL32.dll")); -#endif + // Grab glGetStringi and glGetIntegerv immediately // We need them to grab the extension list // If it fails then the user's drivers don't support GL 3.0