313 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			313 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /*
 | |
| 
 | |
|     GLX loader generated by glad 0.1.12a0 on Tue Dec 20 17:04:11 2016.
 | |
| 
 | |
|     Language/Generator: C/C++
 | |
|     Specification: glx
 | |
|     APIs: glx=1.4
 | |
|     Profile: -
 | |
|     Extensions:
 | |
|         
 | |
|     Loader: True
 | |
|     Local files: False
 | |
|     Omit khrplatform: False
 | |
| 
 | |
|     Commandline:
 | |
|         --api="glx=1.4" --generator="c" --spec="glx" --extensions=""
 | |
|     Online:
 | |
|         http://glad.dav1d.de/#language=c&specification=glx&loader=on&api=glx%3D1.4
 | |
| */
 | |
| 
 | |
| #include <stdio.h>
 | |
| #include <stdlib.h>
 | |
| #include <string.h>
 | |
| #include <glad_2/glad_glx.h>
 | |
| 
 | |
| static void* get_proc(const char *namez);
 | |
| 
 | |
| #ifdef _WIN32
 | |
| #include <windows.h>
 | |
| static HMODULE libGL;
 | |
| 
 | |
| typedef void* (APIENTRYP PFNWGLGETPROCADDRESSPROC_PRIVATE)(const char*);
 | |
| PFNWGLGETPROCADDRESSPROC_PRIVATE gladGetProcAddressPtr;
 | |
| 
 | |
| static
 | |
| int open_gl(void) {
 | |
|     libGL = LoadLibraryW(L"opengl32.dll");
 | |
|     if(libGL != NULL) {
 | |
|         gladGetProcAddressPtr = (PFNWGLGETPROCADDRESSPROC_PRIVATE)GetProcAddress(
 | |
|                 libGL, "wglGetProcAddress");
 | |
|         return gladGetProcAddressPtr != NULL;
 | |
|     }
 | |
| 
 | |
|     return 0;
 | |
| }
 | |
| 
 | |
| static
 | |
| void close_gl(void) {
 | |
|     if(libGL != NULL) {
 | |
|         FreeLibrary(libGL);
 | |
|         libGL = NULL;
 | |
|     }
 | |
| }
 | |
| #else
 | |
| #include <dlfcn.h>
 | |
| static void* libGL;
 | |
| 
 | |
| #ifndef __APPLE__
 | |
| typedef void* (APIENTRYP PFNGLXGETPROCADDRESSPROC_PRIVATE)(const char*);
 | |
| PFNGLXGETPROCADDRESSPROC_PRIVATE gladGetProcAddressPtr;
 | |
| #endif
 | |
| 
 | |
| static
 | |
| int open_gl(void) {
 | |
| #ifdef __APPLE__
 | |
|     static const char *NAMES[] = {
 | |
|         "../Frameworks/OpenGL.framework/OpenGL",
 | |
|         "/Library/Frameworks/OpenGL.framework/OpenGL",
 | |
|         "/System/Library/Frameworks/OpenGL.framework/OpenGL",
 | |
|         "/System/Library/Frameworks/OpenGL.framework/Versions/Current/OpenGL"
 | |
|     };
 | |
| #else
 | |
|     static const char *NAMES[] = {"libGL.so.1", "libGL.so"};
 | |
| #endif
 | |
| 
 | |
|     unsigned int index = 0;
 | |
|     for(index = 0; index < (sizeof(NAMES) / sizeof(NAMES[0])); index++) {
 | |
|         libGL = dlopen(NAMES[index], RTLD_NOW | RTLD_GLOBAL);
 | |
| 
 | |
|         if(libGL != NULL) {
 | |
| #ifdef __APPLE__
 | |
|             return 1;
 | |
| #else
 | |
|             gladGetProcAddressPtr = (PFNGLXGETPROCADDRESSPROC_PRIVATE)dlsym(libGL,
 | |
|                 "glXGetProcAddressARB");
 | |
|             return gladGetProcAddressPtr != NULL;
 | |
| #endif
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     return 0;
 | |
| }
 | |
| 
 | |
| static
 | |
| void close_gl() {
 | |
|     if(libGL != NULL) {
 | |
|         dlclose(libGL);
 | |
|         libGL = NULL;
 | |
|     }
 | |
| }
 | |
| #endif
 | |
| 
 | |
| static
 | |
| void* get_proc(const char *namez) {
 | |
|     void* result = NULL;
 | |
|     if(libGL == NULL) return NULL;
 | |
| 
 | |
| #ifndef __APPLE__
 | |
|     if(gladGetProcAddressPtr != NULL) {
 | |
|         result = gladGetProcAddressPtr(namez);
 | |
|     }
 | |
| #endif
 | |
|     if(result == NULL) {
 | |
| #ifdef _WIN32
 | |
|         result = (void*)GetProcAddress(libGL, namez);
 | |
| #else
 | |
|         result = dlsym(libGL, namez);
 | |
| #endif
 | |
|     }
 | |
| 
 | |
|     return result;
 | |
| }
 | |
| 
 | |
| int gladLoadGLX(Display *dpy, int screen) {
 | |
|     int status = 0;
 | |
| 
 | |
|     if(open_gl()) {
 | |
|         status = gladLoadGLXLoader((GLADloadproc)get_proc, dpy, screen);
 | |
|         close_gl();
 | |
|     }
 | |
| 
 | |
|     return status;
 | |
| }
 | |
| 
 | |
| static Display *GLADGLXDisplay = 0;
 | |
| static int GLADGLXscreen = 0;
 | |
| 
 | |
| static int get_exts(void) {
 | |
|     return 1;
 | |
| }
 | |
| 
 | |
| static void free_exts(void) {
 | |
|     return;
 | |
| }
 | |
| 
 | |
| static int has_ext(const char *ext) {
 | |
|     const char *terminator;
 | |
|     const char *loc;
 | |
|     const char *extensions;
 | |
| 
 | |
|     if(!GLAD_GLX_VERSION_1_1)
 | |
|         return 0;
 | |
| 
 | |
|     extensions = glXQueryExtensionsString(GLADGLXDisplay, GLADGLXscreen);
 | |
| 
 | |
|     if(extensions == NULL || ext == NULL)
 | |
|         return 0;
 | |
| 
 | |
|     while(1) {
 | |
|         loc = strstr(extensions, ext);
 | |
|         if(loc == NULL)
 | |
|             break;
 | |
| 
 | |
|         terminator = loc + strlen(ext);
 | |
|         if((loc == extensions || *(loc - 1) == ' ') &&
 | |
|             (*terminator == ' ' || *terminator == '\0'))
 | |
|         {
 | |
|             return 1;
 | |
|         }
 | |
|         extensions = terminator;
 | |
|     }
 | |
| 
 | |
|     return 0;
 | |
| }
 | |
| 
 | |
| int GLAD_GLX_VERSION_1_0;
 | |
| int GLAD_GLX_VERSION_1_1;
 | |
| int GLAD_GLX_VERSION_1_2;
 | |
| int GLAD_GLX_VERSION_1_3;
 | |
| int GLAD_GLX_VERSION_1_4;
 | |
| PFNGLXGETSELECTEDEVENTPROC glad_glXGetSelectedEvent;
 | |
| PFNGLXQUERYEXTENSIONPROC glad_glXQueryExtension;
 | |
| PFNGLXMAKECURRENTPROC glad_glXMakeCurrent;
 | |
| PFNGLXSELECTEVENTPROC glad_glXSelectEvent;
 | |
| PFNGLXCREATECONTEXTPROC glad_glXCreateContext;
 | |
| PFNGLXCREATEGLXPIXMAPPROC glad_glXCreateGLXPixmap;
 | |
| PFNGLXQUERYVERSIONPROC glad_glXQueryVersion;
 | |
| PFNGLXGETCURRENTREADDRAWABLEPROC glad_glXGetCurrentReadDrawable;
 | |
| PFNGLXDESTROYPIXMAPPROC glad_glXDestroyPixmap;
 | |
| PFNGLXGETCURRENTCONTEXTPROC glad_glXGetCurrentContext;
 | |
| PFNGLXGETPROCADDRESSPROC glad_glXGetProcAddress;
 | |
| PFNGLXWAITGLPROC glad_glXWaitGL;
 | |
| PFNGLXISDIRECTPROC glad_glXIsDirect;
 | |
| PFNGLXDESTROYWINDOWPROC glad_glXDestroyWindow;
 | |
| PFNGLXCREATEWINDOWPROC glad_glXCreateWindow;
 | |
| PFNGLXCOPYCONTEXTPROC glad_glXCopyContext;
 | |
| PFNGLXCREATEPBUFFERPROC glad_glXCreatePbuffer;
 | |
| PFNGLXSWAPBUFFERSPROC glad_glXSwapBuffers;
 | |
| PFNGLXGETCURRENTDISPLAYPROC glad_glXGetCurrentDisplay;
 | |
| PFNGLXGETCURRENTDRAWABLEPROC glad_glXGetCurrentDrawable;
 | |
| PFNGLXQUERYCONTEXTPROC glad_glXQueryContext;
 | |
| PFNGLXCHOOSEVISUALPROC glad_glXChooseVisual;
 | |
| PFNGLXQUERYSERVERSTRINGPROC glad_glXQueryServerString;
 | |
| PFNGLXDESTROYCONTEXTPROC glad_glXDestroyContext;
 | |
| PFNGLXDESTROYGLXPIXMAPPROC glad_glXDestroyGLXPixmap;
 | |
| PFNGLXGETFBCONFIGATTRIBPROC glad_glXGetFBConfigAttrib;
 | |
| PFNGLXUSEXFONTPROC glad_glXUseXFont;
 | |
| PFNGLXDESTROYPBUFFERPROC glad_glXDestroyPbuffer;
 | |
| PFNGLXCHOOSEFBCONFIGPROC glad_glXChooseFBConfig;
 | |
| PFNGLXCREATENEWCONTEXTPROC glad_glXCreateNewContext;
 | |
| PFNGLXMAKECONTEXTCURRENTPROC glad_glXMakeContextCurrent;
 | |
| PFNGLXGETCONFIGPROC glad_glXGetConfig;
 | |
| PFNGLXGETFBCONFIGSPROC glad_glXGetFBConfigs;
 | |
| PFNGLXCREATEPIXMAPPROC glad_glXCreatePixmap;
 | |
| PFNGLXWAITXPROC glad_glXWaitX;
 | |
| PFNGLXGETVISUALFROMFBCONFIGPROC glad_glXGetVisualFromFBConfig;
 | |
| PFNGLXQUERYDRAWABLEPROC glad_glXQueryDrawable;
 | |
| PFNGLXQUERYEXTENSIONSSTRINGPROC glad_glXQueryExtensionsString;
 | |
| PFNGLXGETCLIENTSTRINGPROC glad_glXGetClientString;
 | |
| static void load_GLX_VERSION_1_0(GLADloadproc load) {
 | |
| 	if(!GLAD_GLX_VERSION_1_0) return;
 | |
| 	glad_glXChooseVisual = (PFNGLXCHOOSEVISUALPROC)load("glXChooseVisual");
 | |
| 	glad_glXCreateContext = (PFNGLXCREATECONTEXTPROC)load("glXCreateContext");
 | |
| 	glad_glXDestroyContext = (PFNGLXDESTROYCONTEXTPROC)load("glXDestroyContext");
 | |
| 	glad_glXMakeCurrent = (PFNGLXMAKECURRENTPROC)load("glXMakeCurrent");
 | |
| 	glad_glXCopyContext = (PFNGLXCOPYCONTEXTPROC)load("glXCopyContext");
 | |
| 	glad_glXSwapBuffers = (PFNGLXSWAPBUFFERSPROC)load("glXSwapBuffers");
 | |
| 	glad_glXCreateGLXPixmap = (PFNGLXCREATEGLXPIXMAPPROC)load("glXCreateGLXPixmap");
 | |
| 	glad_glXDestroyGLXPixmap = (PFNGLXDESTROYGLXPIXMAPPROC)load("glXDestroyGLXPixmap");
 | |
| 	glad_glXQueryExtension = (PFNGLXQUERYEXTENSIONPROC)load("glXQueryExtension");
 | |
| 	glad_glXQueryVersion = (PFNGLXQUERYVERSIONPROC)load("glXQueryVersion");
 | |
| 	glad_glXIsDirect = (PFNGLXISDIRECTPROC)load("glXIsDirect");
 | |
| 	glad_glXGetConfig = (PFNGLXGETCONFIGPROC)load("glXGetConfig");
 | |
| 	glad_glXGetCurrentContext = (PFNGLXGETCURRENTCONTEXTPROC)load("glXGetCurrentContext");
 | |
| 	glad_glXGetCurrentDrawable = (PFNGLXGETCURRENTDRAWABLEPROC)load("glXGetCurrentDrawable");
 | |
| 	glad_glXWaitGL = (PFNGLXWAITGLPROC)load("glXWaitGL");
 | |
| 	glad_glXWaitX = (PFNGLXWAITXPROC)load("glXWaitX");
 | |
| 	glad_glXUseXFont = (PFNGLXUSEXFONTPROC)load("glXUseXFont");
 | |
| }
 | |
| static void load_GLX_VERSION_1_1(GLADloadproc load) {
 | |
| 	if(!GLAD_GLX_VERSION_1_1) return;
 | |
| 	glad_glXQueryExtensionsString = (PFNGLXQUERYEXTENSIONSSTRINGPROC)load("glXQueryExtensionsString");
 | |
| 	glad_glXQueryServerString = (PFNGLXQUERYSERVERSTRINGPROC)load("glXQueryServerString");
 | |
| 	glad_glXGetClientString = (PFNGLXGETCLIENTSTRINGPROC)load("glXGetClientString");
 | |
| }
 | |
| static void load_GLX_VERSION_1_2(GLADloadproc load) {
 | |
| 	if(!GLAD_GLX_VERSION_1_2) return;
 | |
| 	glad_glXGetCurrentDisplay = (PFNGLXGETCURRENTDISPLAYPROC)load("glXGetCurrentDisplay");
 | |
| }
 | |
| static void load_GLX_VERSION_1_3(GLADloadproc load) {
 | |
| 	if(!GLAD_GLX_VERSION_1_3) return;
 | |
| 	glad_glXGetFBConfigs = (PFNGLXGETFBCONFIGSPROC)load("glXGetFBConfigs");
 | |
| 	glad_glXChooseFBConfig = (PFNGLXCHOOSEFBCONFIGPROC)load("glXChooseFBConfig");
 | |
| 	glad_glXGetFBConfigAttrib = (PFNGLXGETFBCONFIGATTRIBPROC)load("glXGetFBConfigAttrib");
 | |
| 	glad_glXGetVisualFromFBConfig = (PFNGLXGETVISUALFROMFBCONFIGPROC)load("glXGetVisualFromFBConfig");
 | |
| 	glad_glXCreateWindow = (PFNGLXCREATEWINDOWPROC)load("glXCreateWindow");
 | |
| 	glad_glXDestroyWindow = (PFNGLXDESTROYWINDOWPROC)load("glXDestroyWindow");
 | |
| 	glad_glXCreatePixmap = (PFNGLXCREATEPIXMAPPROC)load("glXCreatePixmap");
 | |
| 	glad_glXDestroyPixmap = (PFNGLXDESTROYPIXMAPPROC)load("glXDestroyPixmap");
 | |
| 	glad_glXCreatePbuffer = (PFNGLXCREATEPBUFFERPROC)load("glXCreatePbuffer");
 | |
| 	glad_glXDestroyPbuffer = (PFNGLXDESTROYPBUFFERPROC)load("glXDestroyPbuffer");
 | |
| 	glad_glXQueryDrawable = (PFNGLXQUERYDRAWABLEPROC)load("glXQueryDrawable");
 | |
| 	glad_glXCreateNewContext = (PFNGLXCREATENEWCONTEXTPROC)load("glXCreateNewContext");
 | |
| 	glad_glXMakeContextCurrent = (PFNGLXMAKECONTEXTCURRENTPROC)load("glXMakeContextCurrent");
 | |
| 	glad_glXGetCurrentReadDrawable = (PFNGLXGETCURRENTREADDRAWABLEPROC)load("glXGetCurrentReadDrawable");
 | |
| 	glad_glXQueryContext = (PFNGLXQUERYCONTEXTPROC)load("glXQueryContext");
 | |
| 	glad_glXSelectEvent = (PFNGLXSELECTEVENTPROC)load("glXSelectEvent");
 | |
| 	glad_glXGetSelectedEvent = (PFNGLXGETSELECTEDEVENTPROC)load("glXGetSelectedEvent");
 | |
| }
 | |
| static void load_GLX_VERSION_1_4(GLADloadproc load) {
 | |
| 	if(!GLAD_GLX_VERSION_1_4) return;
 | |
| 	glad_glXGetProcAddress = (PFNGLXGETPROCADDRESSPROC)load("glXGetProcAddress");
 | |
| }
 | |
| static int find_extensionsGLX(void) {
 | |
| 	if (!get_exts()) return 0;
 | |
| 	free_exts();
 | |
| 	return 1;
 | |
| }
 | |
| 
 | |
| static void find_coreGLX(Display *dpy, int screen) {
 | |
| 	int major = 0, minor = 0;
 | |
| 	if(dpy == 0 && GLADGLXDisplay == 0) {
 | |
| 		dpy = XOpenDisplay(0);
 | |
| 		screen = XScreenNumberOfScreen(XDefaultScreenOfDisplay(dpy));
 | |
| 	} else if(dpy == 0) {
 | |
| 		dpy = GLADGLXDisplay;
 | |
| 		screen = GLADGLXscreen;
 | |
| 	}
 | |
| 	glXQueryVersion(dpy, &major, &minor);
 | |
| 	GLADGLXDisplay = dpy;
 | |
| 	GLADGLXscreen = screen;
 | |
| 	GLAD_GLX_VERSION_1_0 = (major == 1 && minor >= 0) || major > 1;
 | |
| 	GLAD_GLX_VERSION_1_1 = (major == 1 && minor >= 1) || major > 1;
 | |
| 	GLAD_GLX_VERSION_1_2 = (major == 1 && minor >= 2) || major > 1;
 | |
| 	GLAD_GLX_VERSION_1_3 = (major == 1 && minor >= 3) || major > 1;
 | |
| 	GLAD_GLX_VERSION_1_4 = (major == 1 && minor >= 4) || major > 1;
 | |
| }
 | |
| 
 | |
| int gladLoadGLXLoader(GLADloadproc load, Display *dpy, int screen) {
 | |
| 	glXQueryVersion = (PFNGLXQUERYVERSIONPROC)load("glXQueryVersion");
 | |
| 	if(glXQueryVersion == NULL) return 0;
 | |
| 	find_coreGLX(dpy, screen);
 | |
| 	load_GLX_VERSION_1_0(load);
 | |
| 	load_GLX_VERSION_1_1(load);
 | |
| 	load_GLX_VERSION_1_2(load);
 | |
| 	load_GLX_VERSION_1_3(load);
 | |
| 	load_GLX_VERSION_1_4(load);
 | |
| 
 | |
| 	if (!find_extensionsGLX()) return 0;
 | |
| 	return 1;
 | |
| }
 | |
| 
 |