__init__.py (2963B)
1 2 LOAD_OPENGL_DLL = ''' 3 %(pre)s void* %(proc)s(const char *namez); 4 5 #ifdef _WIN32 6 #include <windows.h> 7 static HMODULE libGL; 8 9 typedef void* (APIENTRYP PFNWGLGETPROCADDRESSPROC_PRIVATE)(const char*); 10 PFNWGLGETPROCADDRESSPROC_PRIVATE gladGetProcAddressPtr; 11 12 %(pre)s 13 int %(init)s(void) { 14 libGL = LoadLibraryW(L"opengl32.dll"); 15 if(libGL != NULL) { 16 gladGetProcAddressPtr = (PFNWGLGETPROCADDRESSPROC_PRIVATE)GetProcAddress( 17 libGL, "wglGetProcAddress"); 18 return gladGetProcAddressPtr != NULL; 19 } 20 21 return 0; 22 } 23 24 %(pre)s 25 void %(terminate)s(void) { 26 if(libGL != NULL) { 27 FreeLibrary(libGL); 28 libGL = NULL; 29 } 30 } 31 #else 32 #include <dlfcn.h> 33 static void* libGL; 34 35 #ifndef __APPLE__ 36 typedef void* (APIENTRYP PFNGLXGETPROCADDRESSPROC_PRIVATE)(const char*); 37 PFNGLXGETPROCADDRESSPROC_PRIVATE gladGetProcAddressPtr; 38 #endif 39 40 %(pre)s 41 int %(init)s(void) { 42 #ifdef __APPLE__ 43 static const char *NAMES[] = { 44 "../Frameworks/OpenGL.framework/OpenGL", 45 "/Library/Frameworks/OpenGL.framework/OpenGL", 46 "/System/Library/Frameworks/OpenGL.framework/OpenGL", 47 "/System/Library/Frameworks/OpenGL.framework/Versions/Current/OpenGL" 48 }; 49 #else 50 static const char *NAMES[] = {"libGL.so.1", "libGL.so"}; 51 #endif 52 53 unsigned int index = 0; 54 for(index = 0; index < (sizeof(NAMES) / sizeof(NAMES[0])); index++) { 55 libGL = dlopen(NAMES[index], RTLD_NOW | RTLD_GLOBAL); 56 57 if(libGL != NULL) { 58 #ifdef __APPLE__ 59 return 1; 60 #else 61 gladGetProcAddressPtr = (PFNGLXGETPROCADDRESSPROC_PRIVATE)dlsym(libGL, 62 "glXGetProcAddressARB"); 63 return gladGetProcAddressPtr != NULL; 64 #endif 65 } 66 } 67 68 return 0; 69 } 70 71 %(pre)s 72 void %(terminate)s() { 73 if(libGL != NULL) { 74 dlclose(libGL); 75 libGL = NULL; 76 } 77 } 78 #endif 79 80 %(pre)s 81 void* %(proc)s(const char *namez) { 82 void* result = NULL; 83 if(libGL == NULL) return NULL; 84 85 #ifndef __APPLE__ 86 if(gladGetProcAddressPtr != NULL) { 87 result = gladGetProcAddressPtr(namez); 88 } 89 #endif 90 if(result == NULL) { 91 #ifdef _WIN32 92 result = (void*)GetProcAddress(libGL, namez); 93 #else 94 result = dlsym(libGL, namez); 95 #endif 96 } 97 98 return result; 99 } 100 ''' 101 102 LOAD_OPENGL_DLL_H = ''' 103 ''' 104 105 LOAD_OPENGL_GLAPI_H = ''' 106 #ifndef GLAPI 107 # if defined(GLAD_GLAPI_EXPORT) 108 # if defined(WIN32) || defined(__CYGWIN__) 109 # if defined(GLAD_GLAPI_EXPORT_BUILD) 110 # if defined(__GNUC__) 111 # define GLAPI __attribute__ ((dllexport)) extern 112 # else 113 # define GLAPI __declspec(dllexport) extern 114 # endif 115 # else 116 # if defined(__GNUC__) 117 # define GLAPI __attribute__ ((dllimport)) extern 118 # else 119 # define GLAPI __declspec(dllimport) extern 120 # endif 121 # endif 122 # elif defined(__GNUC__) && defined(GLAD_GLAPI_EXPORT_BUILD) 123 # define GLAPI __attribute__ ((visibility ("default"))) extern 124 # else 125 # define GLAPI extern 126 # endif 127 # else 128 # define GLAPI extern 129 # endif 130 #endif 131 ''' 132