22#include <windows.h>
33#include <GL/gl.h>
44#include <stddef.h>
5+ #include <stdio.h>
56
67typedef float GLfloat ;
78typedef signed char GLbyte ;
@@ -98,12 +99,29 @@ void init_gles2_shim() {
9899 static int initialized = 0 ;
99100 if (initialized ) return ;
100101 HMODULE hLib = GetModuleHandleA ("opengl32.dll" );
101- GET_PROC (glGenFramebuffers , PFNGLGENFRAMEBUFFERSPROC );
102- GET_PROC (glBindFramebuffer , PFNGLBINDFRAMEBUFFERPROC );
103- GET_PROC (glFramebufferTexture2D , PFNGLFRAMEBUFFERTEXTURE2DPROC );
104- GET_PROC (glDeleteFramebuffers , PFNGLDELETEFRAMEBUFFERSPROC );
105- GET_PROC (glCheckFramebufferStatus , PFNGLCHECKFRAMEBUFFERSTATUSPROC );
106- GET_PROC (glActiveTexture , PFNGLACTIVETEXTUREPROC );
102+ if (!hLib ) {
103+ fprintf (stderr , "Failed to get handle for opengl32.dll\n" );
104+ return ;
105+ }
106+
107+ #undef GET_PROC
108+ #define GET_PROC (name , type ) \
109+ name = (type)wglGetProcAddress(#name); \
110+ if (!name) name = (type)GetProcAddress(hLib, #name); \
111+ if (!name) fprintf(stderr, "Failed to load function: %s\n", #name);
112+
113+ #define GET_PROC_EXT (name , type , ext ) \
114+ name = (type)wglGetProcAddress(#name); \
115+ if (!name) name = (type)wglGetProcAddress(#name #ext); \
116+ if (!name) name = (type)GetProcAddress(hLib, #name); \
117+ if (!name) fprintf(stderr, "Failed to load function: %s (and %s)\n", #name, #name #ext);
118+
119+ GET_PROC_EXT (glGenFramebuffers , PFNGLGENFRAMEBUFFERSPROC , EXT );
120+ GET_PROC_EXT (glBindFramebuffer , PFNGLBINDFRAMEBUFFERPROC , EXT );
121+ GET_PROC_EXT (glFramebufferTexture2D , PFNGLFRAMEBUFFERTEXTURE2DPROC , EXT );
122+ GET_PROC_EXT (glDeleteFramebuffers , PFNGLDELETEFRAMEBUFFERSPROC , EXT );
123+ GET_PROC_EXT (glCheckFramebufferStatus , PFNGLCHECKFRAMEBUFFERSTATUSPROC , EXT );
124+ GET_PROC_EXT (glActiveTexture , PFNGLACTIVETEXTUREPROC , ARB );
107125 GET_PROC (glBlendFuncSeparate , PFNGLBLENDFUNCSEPARATEPROC );
108126 GET_PROC (glCreateShader , PFNGLCREATESHADERPROC );
109127 GET_PROC (glShaderSource , PFNGLSHADERSOURCEPROC );
@@ -130,6 +148,6 @@ void init_gles2_shim() {
130148 GET_PROC (glGetVertexAttribiv , PFNGLGETVERTEXATTRIBIVPROC );
131149 GET_PROC (glValidateProgram , PFNGLVALIDATEPROGRAMPROC );
132150 GET_PROC (glBindBuffer , PFNGLBINDBUFFERPROC );
151+
133152 initialized = 1 ;
134- }
135- #endif
153+ }
0 commit comments