PDA

View Full Version : Updated drivers, now DLL entry points are missing



Tim Haynes
08-01-2015, 08:42 PM
Hi All -

I recently updated my graphics drivers and I now find that many procedures are not found in the opengl library. I'm using gl3w which generates the following code for loading and binding to the OpenGL entry points. Note that this code was working perfectly fine before updating my drivers. I have added some strings to generate debug messages but otherwise the code is as created by gl3w:


static void open_libgl(void)
{
libgl = LoadLibraryA("opengl32.dll");
}

static void close_libgl(void)
{
FreeLibrary(libgl);
}

static GL3WglProc get_proc(const char *proc)
{
GL3WglProc res;
std::string debugMessage = "WGL Load procedure : ";
res = (GL3WglProc) wglGetProcAddress(proc);
if (!res)
{
debugMessage = " Load procedure : ";
res = (GL3WglProc) GetProcAddress(libgl, proc); // any attempt to get procedures from here fail (res == null)
}
debugMessage.append(proc);
if(!res)
{
debugMessage.append(" FAILED !!!");
}
DEBUG_PRINT(debugMessage.c_str());
return res;
}

int gl3wInit(void)
{
open_libgl();
load_procs();
close_libgl();
return parse_version();
}

The ouput debug messages from above are a long list of the OpenGL procedures that were found or missing (FAILED !!!):

(partial list):

WGL Load procedure : glVertexAttribP1ui
WGL Load procedure : glVertexAttribP1uiv
WGL Load procedure : glVertexAttribP2ui
WGL Load procedure : glVertexAttribP2uiv
WGL Load procedure : glVertexAttribP3ui
WGL Load procedure : glVertexAttribP3uiv
WGL Load procedure : glVertexAttribP4ui
WGL Load procedure : glVertexAttribP4uiv
Load procedure : glDrawArraysIndirect FAILED !!!
Load procedure : glDrawElementsIndirect FAILED !!!
Load procedure : glUniform1d FAILED !!!
Load procedure : glUniform2d FAILED !!!
Load procedure : glUniform3d FAILED !!!
Load procedure : glUniform4d FAILED !!!
Load procedure : glUniform1dv FAILED !!!
Load procedure : glUniform2dv FAILED !!!
Load procedure : glUniform3dv FAILED !!!
Load procedure : glUniform4dv FAILED !!!
Load procedure : glUniformMatrix2dv FAILED !!!
Load procedure : glUniformMatrix3dv FAILED !!!
Load procedure : glUniformMatrix4dv FAILED !!!
Load procedure : glUniformMatrix2x3dv FAILED !!!
Load procedure : glUniformMatrix2x4dv FAILED !!!
Load procedure : glUniformMatrix3x2dv FAILED !!!
Load procedure : glUniformMatrix3x4dv FAILED !!!

The code produced by gl3w is designed to first check for an entry point using wglGetProcAddress and if not found it will try GetProcAddress. Examining the output I find that all attempts to find an entry point using wglGetProcAddress are successful and any attempt to find the procedures using GetProcAddress are returning null (not found).

Any advice on how to debug this would be appreciated. Thanks in advance!

System Details:
Windows 7
Microsoft VS 2012
MSI laptop core-i7 with Intel HD 4000
NVIDIA GeForce GTX680M graphics driver version: 353.62