diff --git a/source/Irrlicht/CWGLManager.cpp b/source/Irrlicht/CWGLManager.cpp index e45c96a4..b807acb2 100644 --- a/source/Irrlicht/CWGLManager.cpp +++ b/source/Irrlicht/CWGLManager.cpp @@ -26,6 +26,7 @@ CWGLManager::CWGLManager() #ifdef _DEBUG setDebugName("CWGLManager"); #endif + memset(FunctionPointers, 0, sizeof(FunctionPointers)); } CWGLManager::~CWGLManager() @@ -206,6 +207,9 @@ bool CWGLManager::initialize(const SIrrlichtCreationParameters& params, const SE os::Printer::log("WGL_extensions", wglExtensions); #endif + // Without a GL context we can't call wglGetProcAddress so store this for later + FunctionPointers[0] = (void*)wglGetProcAddress("wglCreateContextAttribsARB"); + #ifdef WGL_ARB_pixel_format PFNWGLCHOOSEPIXELFORMATARBPROC wglChoosePixelFormat_ARB = (PFNWGLCHOOSEPIXELFORMATARBPROC)wglGetProcAddress("wglChoosePixelFormatARB"); if (pixel_format_supported && wglChoosePixelFormat_ARB) @@ -400,7 +404,7 @@ bool CWGLManager::generateContext() HGLRC hrc; // create rendering context #ifdef WGL_ARB_create_context - PFNWGLCREATECONTEXTATTRIBSARBPROC wglCreateContextAttribs_ARB = (PFNWGLCREATECONTEXTATTRIBSARBPROC)wglGetProcAddress("wglCreateContextAttribsARB"); + PFNWGLCREATECONTEXTATTRIBSARBPROC wglCreateContextAttribs_ARB = (PFNWGLCREATECONTEXTATTRIBSARBPROC)FunctionPointers[0]; if (wglCreateContextAttribs_ARB) { // with 3.0 all available profiles should be usable, higher versions impose restrictions diff --git a/source/Irrlicht/CWGLManager.h b/source/Irrlicht/CWGLManager.h index 4cfeb8f0..ff4af34c 100644 --- a/source/Irrlicht/CWGLManager.h +++ b/source/Irrlicht/CWGLManager.h @@ -65,6 +65,7 @@ namespace video s32 PixelFormat; PIXELFORMATDESCRIPTOR pfd; ECOLOR_FORMAT ColorFormat; + void* FunctionPointers[1]; }; } }