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_4/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;
|
|
}
|
|
|