mirror of
				https://github.com/RetroDECK/Duckstation.git
				synced 2025-04-10 19:15:14 +00:00 
			
		
		
		
	
		
			
	
	
		
			875 lines
		
	
	
		
			42 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			875 lines
		
	
	
		
			42 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
|   | /*
 | ||
|  | 
 | ||
|  |     GLX loader generated by glad 0.1.33 on Sun May  3 16:48:35 2020. | ||
|  | 
 | ||
|  |     Language/Generator: C/C++ | ||
|  |     Specification: glx | ||
|  |     APIs: glx=1.4 | ||
|  |     Profile: - | ||
|  |     Extensions: | ||
|  |         GLX_3DFX_multisample, | ||
|  |         GLX_AMD_gpu_association, | ||
|  |         GLX_ARB_context_flush_control, | ||
|  |         GLX_ARB_create_context, | ||
|  |         GLX_ARB_create_context_no_error, | ||
|  |         GLX_ARB_create_context_profile, | ||
|  |         GLX_ARB_create_context_robustness, | ||
|  |         GLX_ARB_fbconfig_float, | ||
|  |         GLX_ARB_framebuffer_sRGB, | ||
|  |         GLX_ARB_get_proc_address, | ||
|  |         GLX_ARB_multisample, | ||
|  |         GLX_ARB_robustness_application_isolation, | ||
|  |         GLX_ARB_robustness_share_group_isolation, | ||
|  |         GLX_ARB_vertex_buffer_object, | ||
|  |         GLX_EXT_buffer_age, | ||
|  |         GLX_EXT_context_priority, | ||
|  |         GLX_EXT_create_context_es2_profile, | ||
|  |         GLX_EXT_create_context_es_profile, | ||
|  |         GLX_EXT_fbconfig_packed_float, | ||
|  |         GLX_EXT_framebuffer_sRGB, | ||
|  |         GLX_EXT_import_context, | ||
|  |         GLX_EXT_libglvnd, | ||
|  |         GLX_EXT_no_config_context, | ||
|  |         GLX_EXT_stereo_tree, | ||
|  |         GLX_EXT_swap_control, | ||
|  |         GLX_EXT_swap_control_tear, | ||
|  |         GLX_EXT_texture_from_pixmap, | ||
|  |         GLX_EXT_visual_info, | ||
|  |         GLX_EXT_visual_rating, | ||
|  |         GLX_INTEL_swap_event, | ||
|  |         GLX_MESA_agp_offset, | ||
|  |         GLX_MESA_copy_sub_buffer, | ||
|  |         GLX_MESA_pixmap_colormap, | ||
|  |         GLX_MESA_query_renderer, | ||
|  |         GLX_MESA_release_buffers, | ||
|  |         GLX_MESA_set_3dfx_mode, | ||
|  |         GLX_MESA_swap_control, | ||
|  |         GLX_NV_copy_buffer, | ||
|  |         GLX_NV_copy_image, | ||
|  |         GLX_NV_delay_before_swap, | ||
|  |         GLX_NV_float_buffer, | ||
|  |         GLX_NV_multigpu_context, | ||
|  |         GLX_NV_multisample_coverage, | ||
|  |         GLX_NV_present_video, | ||
|  |         GLX_NV_robustness_video_memory_purge, | ||
|  |         GLX_NV_swap_group, | ||
|  |         GLX_NV_video_capture, | ||
|  |         GLX_NV_video_out, | ||
|  |         GLX_OML_swap_method, | ||
|  |         GLX_OML_sync_control, | ||
|  |         GLX_SGIS_blended_overlay, | ||
|  |         GLX_SGIS_multisample, | ||
|  |         GLX_SGIS_shared_multisample, | ||
|  |         GLX_SGIX_dmbuffer, | ||
|  |         GLX_SGIX_fbconfig, | ||
|  |         GLX_SGIX_hyperpipe, | ||
|  |         GLX_SGIX_pbuffer, | ||
|  |         GLX_SGIX_swap_barrier, | ||
|  |         GLX_SGIX_swap_group, | ||
|  |         GLX_SGIX_video_resize, | ||
|  |         GLX_SGIX_video_source, | ||
|  |         GLX_SGIX_visual_select_group, | ||
|  |         GLX_SGI_cushion, | ||
|  |         GLX_SGI_make_current_read, | ||
|  |         GLX_SGI_swap_control, | ||
|  |         GLX_SGI_video_sync, | ||
|  |         GLX_SUN_get_transparent_index | ||
|  |     Loader: True | ||
|  |     Local files: False | ||
|  |     Omit khrplatform: False | ||
|  |     Reproducible: False | ||
|  | 
 | ||
|  |     Commandline: | ||
|  |         --api="glx=1.4" --generator="c" --spec="glx" --extensions="GLX_3DFX_multisample,GLX_AMD_gpu_association,GLX_ARB_context_flush_control,GLX_ARB_create_context,GLX_ARB_create_context_no_error,GLX_ARB_create_context_profile,GLX_ARB_create_context_robustness,GLX_ARB_fbconfig_float,GLX_ARB_framebuffer_sRGB,GLX_ARB_get_proc_address,GLX_ARB_multisample,GLX_ARB_robustness_application_isolation,GLX_ARB_robustness_share_group_isolation,GLX_ARB_vertex_buffer_object,GLX_EXT_buffer_age,GLX_EXT_context_priority,GLX_EXT_create_context_es2_profile,GLX_EXT_create_context_es_profile,GLX_EXT_fbconfig_packed_float,GLX_EXT_framebuffer_sRGB,GLX_EXT_import_context,GLX_EXT_libglvnd,GLX_EXT_no_config_context,GLX_EXT_stereo_tree,GLX_EXT_swap_control,GLX_EXT_swap_control_tear,GLX_EXT_texture_from_pixmap,GLX_EXT_visual_info,GLX_EXT_visual_rating,GLX_INTEL_swap_event,GLX_MESA_agp_offset,GLX_MESA_copy_sub_buffer,GLX_MESA_pixmap_colormap,GLX_MESA_query_renderer,GLX_MESA_release_buffers,GLX_MESA_set_3dfx_mode,GLX_MESA_swap_control,GLX_NV_copy_buffer,GLX_NV_copy_image,GLX_NV_delay_before_swap,GLX_NV_float_buffer,GLX_NV_multigpu_context,GLX_NV_multisample_coverage,GLX_NV_present_video,GLX_NV_robustness_video_memory_purge,GLX_NV_swap_group,GLX_NV_video_capture,GLX_NV_video_out,GLX_OML_swap_method,GLX_OML_sync_control,GLX_SGIS_blended_overlay,GLX_SGIS_multisample,GLX_SGIS_shared_multisample,GLX_SGIX_dmbuffer,GLX_SGIX_fbconfig,GLX_SGIX_hyperpipe,GLX_SGIX_pbuffer,GLX_SGIX_swap_barrier,GLX_SGIX_swap_group,GLX_SGIX_video_resize,GLX_SGIX_video_source,GLX_SGIX_visual_select_group,GLX_SGI_cushion,GLX_SGI_make_current_read,GLX_SGI_swap_control,GLX_SGI_video_sync,GLX_SUN_get_transparent_index" | ||
|  |     Online: | ||
|  |         Too many extensions | ||
|  | */ | ||
|  | 
 | ||
|  | #include <stdio.h>
 | ||
|  | #include <stdlib.h>
 | ||
|  | #include <string.h>
 | ||
|  | #include "glad_glx.h"
 | ||
|  | 
 | ||
|  | static void* get_proc(const char *namez); | ||
|  | 
 | ||
|  | #if defined(_WIN32) || defined(__CYGWIN__)
 | ||
|  | #ifndef _WINDOWS_
 | ||
|  | #undef APIENTRY
 | ||
|  | #endif
 | ||
|  | #include <windows.h>
 | ||
|  | static HMODULE libGL; | ||
|  | 
 | ||
|  | typedef void* (APIENTRYP PFNWGLGETPROCADDRESSPROC_PRIVATE)(const char*); | ||
|  | static PFNWGLGETPROCADDRESSPROC_PRIVATE gladGetProcAddressPtr; | ||
|  | 
 | ||
|  | #ifdef _MSC_VER
 | ||
|  | #ifdef __has_include
 | ||
|  |   #if __has_include(<winapifamily.h>)
 | ||
|  |     #define HAVE_WINAPIFAMILY 1
 | ||
|  |   #endif
 | ||
|  | #elif _MSC_VER >= 1700 && !_USING_V110_SDK71_
 | ||
|  |   #define HAVE_WINAPIFAMILY 1
 | ||
|  | #endif
 | ||
|  | #endif
 | ||
|  | 
 | ||
|  | #ifdef HAVE_WINAPIFAMILY
 | ||
|  |   #include <winapifamily.h>
 | ||
|  |   #if !WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) && WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP)
 | ||
|  |     #define IS_UWP 1
 | ||
|  |   #endif
 | ||
|  | #endif
 | ||
|  | 
 | ||
|  | static | ||
|  | int open_gl(void) { | ||
|  | #ifndef IS_UWP
 | ||
|  |     libGL = LoadLibraryW(L"opengl32.dll"); | ||
|  |     if(libGL != NULL) { | ||
|  |         void (* tmp)(void); | ||
|  |         tmp = (void(*)(void)) GetProcAddress(libGL, "wglGetProcAddress"); | ||
|  |         gladGetProcAddressPtr = (PFNWGLGETPROCADDRESSPROC_PRIVATE) tmp; | ||
|  |         return gladGetProcAddressPtr != NULL; | ||
|  |     } | ||
|  | #endif
 | ||
|  | 
 | ||
|  |     return 0; | ||
|  | } | ||
|  | 
 | ||
|  | static | ||
|  | void close_gl(void) { | ||
|  |     if(libGL != NULL) { | ||
|  |         FreeLibrary((HMODULE) libGL); | ||
|  |         libGL = NULL; | ||
|  |     } | ||
|  | } | ||
|  | #else
 | ||
|  | #include <dlfcn.h>
 | ||
|  | static void* libGL; | ||
|  | 
 | ||
|  | #if !defined(__APPLE__) && !defined(__HAIKU__)
 | ||
|  | typedef void* (APIENTRYP PFNGLXGETPROCADDRESSPROC_PRIVATE)(const char*); | ||
|  | static 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) { | ||
|  | #if defined(__APPLE__) || defined(__HAIKU__)
 | ||
|  |             return 1; | ||
|  | #else
 | ||
|  |             gladGetProcAddressPtr = (PFNGLXGETPROCADDRESSPROC_PRIVATE)dlsym(libGL, | ||
|  |                 "glXGetProcAddressARB"); | ||
|  |             return gladGetProcAddressPtr != NULL; | ||
|  | #endif
 | ||
|  |         } | ||
|  |     } | ||
|  | 
 | ||
|  |     return 0; | ||
|  | } | ||
|  | 
 | ||
|  | static | ||
|  | void close_gl(void) { | ||
|  |     if(libGL != NULL) { | ||
|  |         dlclose(libGL); | ||
|  |         libGL = NULL; | ||
|  |     } | ||
|  | } | ||
|  | #endif
 | ||
|  | 
 | ||
|  | static | ||
|  | void* get_proc(const char *namez) { | ||
|  |     void* result = NULL; | ||
|  |     if(libGL == NULL) return NULL; | ||
|  | 
 | ||
|  | #if !defined(__APPLE__) && !defined(__HAIKU__)
 | ||
|  |     if(gladGetProcAddressPtr != NULL) { | ||
|  |         result = gladGetProcAddressPtr(namez); | ||
|  |     } | ||
|  | #endif
 | ||
|  |     if(result == NULL) { | ||
|  | #if defined(_WIN32) || defined(__CYGWIN__)
 | ||
|  |         result = (void*)GetProcAddress((HMODULE) 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 = 0; | ||
|  | int GLAD_GLX_VERSION_1_1 = 0; | ||
|  | int GLAD_GLX_VERSION_1_2 = 0; | ||
|  | int GLAD_GLX_VERSION_1_3 = 0; | ||
|  | int GLAD_GLX_VERSION_1_4 = 0; | ||
|  | PFNGLXCHOOSEFBCONFIGPROC glad_glXChooseFBConfig = NULL; | ||
|  | PFNGLXCHOOSEVISUALPROC glad_glXChooseVisual = NULL; | ||
|  | PFNGLXCOPYCONTEXTPROC glad_glXCopyContext = NULL; | ||
|  | PFNGLXCREATECONTEXTPROC glad_glXCreateContext = NULL; | ||
|  | PFNGLXCREATEGLXPIXMAPPROC glad_glXCreateGLXPixmap = NULL; | ||
|  | PFNGLXCREATENEWCONTEXTPROC glad_glXCreateNewContext = NULL; | ||
|  | PFNGLXCREATEPBUFFERPROC glad_glXCreatePbuffer = NULL; | ||
|  | PFNGLXCREATEPIXMAPPROC glad_glXCreatePixmap = NULL; | ||
|  | PFNGLXCREATEWINDOWPROC glad_glXCreateWindow = NULL; | ||
|  | PFNGLXDESTROYCONTEXTPROC glad_glXDestroyContext = NULL; | ||
|  | PFNGLXDESTROYGLXPIXMAPPROC glad_glXDestroyGLXPixmap = NULL; | ||
|  | PFNGLXDESTROYPBUFFERPROC glad_glXDestroyPbuffer = NULL; | ||
|  | PFNGLXDESTROYPIXMAPPROC glad_glXDestroyPixmap = NULL; | ||
|  | PFNGLXDESTROYWINDOWPROC glad_glXDestroyWindow = NULL; | ||
|  | PFNGLXGETCLIENTSTRINGPROC glad_glXGetClientString = NULL; | ||
|  | PFNGLXGETCONFIGPROC glad_glXGetConfig = NULL; | ||
|  | PFNGLXGETCURRENTCONTEXTPROC glad_glXGetCurrentContext = NULL; | ||
|  | PFNGLXGETCURRENTDISPLAYPROC glad_glXGetCurrentDisplay = NULL; | ||
|  | PFNGLXGETCURRENTDRAWABLEPROC glad_glXGetCurrentDrawable = NULL; | ||
|  | PFNGLXGETCURRENTREADDRAWABLEPROC glad_glXGetCurrentReadDrawable = NULL; | ||
|  | PFNGLXGETFBCONFIGATTRIBPROC glad_glXGetFBConfigAttrib = NULL; | ||
|  | PFNGLXGETFBCONFIGSPROC glad_glXGetFBConfigs = NULL; | ||
|  | PFNGLXGETPROCADDRESSPROC glad_glXGetProcAddress = NULL; | ||
|  | PFNGLXGETSELECTEDEVENTPROC glad_glXGetSelectedEvent = NULL; | ||
|  | PFNGLXGETVISUALFROMFBCONFIGPROC glad_glXGetVisualFromFBConfig = NULL; | ||
|  | PFNGLXISDIRECTPROC glad_glXIsDirect = NULL; | ||
|  | PFNGLXMAKECONTEXTCURRENTPROC glad_glXMakeContextCurrent = NULL; | ||
|  | PFNGLXMAKECURRENTPROC glad_glXMakeCurrent = NULL; | ||
|  | PFNGLXQUERYCONTEXTPROC glad_glXQueryContext = NULL; | ||
|  | PFNGLXQUERYDRAWABLEPROC glad_glXQueryDrawable = NULL; | ||
|  | PFNGLXQUERYEXTENSIONPROC glad_glXQueryExtension = NULL; | ||
|  | PFNGLXQUERYEXTENSIONSSTRINGPROC glad_glXQueryExtensionsString = NULL; | ||
|  | PFNGLXQUERYSERVERSTRINGPROC glad_glXQueryServerString = NULL; | ||
|  | PFNGLXQUERYVERSIONPROC glad_glXQueryVersion = NULL; | ||
|  | PFNGLXSELECTEVENTPROC glad_glXSelectEvent = NULL; | ||
|  | PFNGLXSWAPBUFFERSPROC glad_glXSwapBuffers = NULL; | ||
|  | PFNGLXUSEXFONTPROC glad_glXUseXFont = NULL; | ||
|  | PFNGLXWAITGLPROC glad_glXWaitGL = NULL; | ||
|  | PFNGLXWAITXPROC glad_glXWaitX = NULL; | ||
|  | int GLAD_GLX_3DFX_multisample = 0; | ||
|  | int GLAD_GLX_AMD_gpu_association = 0; | ||
|  | int GLAD_GLX_ARB_context_flush_control = 0; | ||
|  | int GLAD_GLX_ARB_create_context = 0; | ||
|  | int GLAD_GLX_ARB_create_context_no_error = 0; | ||
|  | int GLAD_GLX_ARB_create_context_profile = 0; | ||
|  | int GLAD_GLX_ARB_create_context_robustness = 0; | ||
|  | int GLAD_GLX_ARB_fbconfig_float = 0; | ||
|  | int GLAD_GLX_ARB_framebuffer_sRGB = 0; | ||
|  | int GLAD_GLX_ARB_get_proc_address = 0; | ||
|  | int GLAD_GLX_ARB_multisample = 0; | ||
|  | int GLAD_GLX_ARB_robustness_application_isolation = 0; | ||
|  | int GLAD_GLX_ARB_robustness_share_group_isolation = 0; | ||
|  | int GLAD_GLX_ARB_vertex_buffer_object = 0; | ||
|  | int GLAD_GLX_EXT_buffer_age = 0; | ||
|  | int GLAD_GLX_EXT_context_priority = 0; | ||
|  | int GLAD_GLX_EXT_create_context_es2_profile = 0; | ||
|  | int GLAD_GLX_EXT_create_context_es_profile = 0; | ||
|  | int GLAD_GLX_EXT_fbconfig_packed_float = 0; | ||
|  | int GLAD_GLX_EXT_framebuffer_sRGB = 0; | ||
|  | int GLAD_GLX_EXT_import_context = 0; | ||
|  | int GLAD_GLX_EXT_libglvnd = 0; | ||
|  | int GLAD_GLX_EXT_no_config_context = 0; | ||
|  | int GLAD_GLX_EXT_stereo_tree = 0; | ||
|  | int GLAD_GLX_EXT_swap_control = 0; | ||
|  | int GLAD_GLX_EXT_swap_control_tear = 0; | ||
|  | int GLAD_GLX_EXT_texture_from_pixmap = 0; | ||
|  | int GLAD_GLX_EXT_visual_info = 0; | ||
|  | int GLAD_GLX_EXT_visual_rating = 0; | ||
|  | int GLAD_GLX_INTEL_swap_event = 0; | ||
|  | int GLAD_GLX_MESA_agp_offset = 0; | ||
|  | int GLAD_GLX_MESA_copy_sub_buffer = 0; | ||
|  | int GLAD_GLX_MESA_pixmap_colormap = 0; | ||
|  | int GLAD_GLX_MESA_query_renderer = 0; | ||
|  | int GLAD_GLX_MESA_release_buffers = 0; | ||
|  | int GLAD_GLX_MESA_set_3dfx_mode = 0; | ||
|  | int GLAD_GLX_MESA_swap_control = 0; | ||
|  | int GLAD_GLX_NV_copy_buffer = 0; | ||
|  | int GLAD_GLX_NV_copy_image = 0; | ||
|  | int GLAD_GLX_NV_delay_before_swap = 0; | ||
|  | int GLAD_GLX_NV_float_buffer = 0; | ||
|  | int GLAD_GLX_NV_multigpu_context = 0; | ||
|  | int GLAD_GLX_NV_multisample_coverage = 0; | ||
|  | int GLAD_GLX_NV_present_video = 0; | ||
|  | int GLAD_GLX_NV_robustness_video_memory_purge = 0; | ||
|  | int GLAD_GLX_NV_swap_group = 0; | ||
|  | int GLAD_GLX_NV_video_capture = 0; | ||
|  | int GLAD_GLX_NV_video_out = 0; | ||
|  | int GLAD_GLX_OML_swap_method = 0; | ||
|  | int GLAD_GLX_OML_sync_control = 0; | ||
|  | int GLAD_GLX_SGIS_blended_overlay = 0; | ||
|  | int GLAD_GLX_SGIS_multisample = 0; | ||
|  | int GLAD_GLX_SGIS_shared_multisample = 0; | ||
|  | int GLAD_GLX_SGIX_dmbuffer = 0; | ||
|  | int GLAD_GLX_SGIX_fbconfig = 0; | ||
|  | int GLAD_GLX_SGIX_hyperpipe = 0; | ||
|  | int GLAD_GLX_SGIX_pbuffer = 0; | ||
|  | int GLAD_GLX_SGIX_swap_barrier = 0; | ||
|  | int GLAD_GLX_SGIX_swap_group = 0; | ||
|  | int GLAD_GLX_SGIX_video_resize = 0; | ||
|  | int GLAD_GLX_SGIX_video_source = 0; | ||
|  | int GLAD_GLX_SGIX_visual_select_group = 0; | ||
|  | int GLAD_GLX_SGI_cushion = 0; | ||
|  | int GLAD_GLX_SGI_make_current_read = 0; | ||
|  | int GLAD_GLX_SGI_swap_control = 0; | ||
|  | int GLAD_GLX_SGI_video_sync = 0; | ||
|  | int GLAD_GLX_SUN_get_transparent_index = 0; | ||
|  | PFNGLXGETGPUIDSAMDPROC glad_glXGetGPUIDsAMD = NULL; | ||
|  | PFNGLXGETGPUINFOAMDPROC glad_glXGetGPUInfoAMD = NULL; | ||
|  | PFNGLXGETCONTEXTGPUIDAMDPROC glad_glXGetContextGPUIDAMD = NULL; | ||
|  | PFNGLXCREATEASSOCIATEDCONTEXTAMDPROC glad_glXCreateAssociatedContextAMD = NULL; | ||
|  | PFNGLXCREATEASSOCIATEDCONTEXTATTRIBSAMDPROC glad_glXCreateAssociatedContextAttribsAMD = NULL; | ||
|  | PFNGLXDELETEASSOCIATEDCONTEXTAMDPROC glad_glXDeleteAssociatedContextAMD = NULL; | ||
|  | PFNGLXMAKEASSOCIATEDCONTEXTCURRENTAMDPROC glad_glXMakeAssociatedContextCurrentAMD = NULL; | ||
|  | PFNGLXGETCURRENTASSOCIATEDCONTEXTAMDPROC glad_glXGetCurrentAssociatedContextAMD = NULL; | ||
|  | PFNGLXBLITCONTEXTFRAMEBUFFERAMDPROC glad_glXBlitContextFramebufferAMD = NULL; | ||
|  | PFNGLXCREATECONTEXTATTRIBSARBPROC glad_glXCreateContextAttribsARB = NULL; | ||
|  | PFNGLXGETPROCADDRESSARBPROC glad_glXGetProcAddressARB = NULL; | ||
|  | PFNGLXGETCURRENTDISPLAYEXTPROC glad_glXGetCurrentDisplayEXT = NULL; | ||
|  | PFNGLXQUERYCONTEXTINFOEXTPROC glad_glXQueryContextInfoEXT = NULL; | ||
|  | PFNGLXGETCONTEXTIDEXTPROC glad_glXGetContextIDEXT = NULL; | ||
|  | PFNGLXIMPORTCONTEXTEXTPROC glad_glXImportContextEXT = NULL; | ||
|  | PFNGLXFREECONTEXTEXTPROC glad_glXFreeContextEXT = NULL; | ||
|  | PFNGLXSWAPINTERVALEXTPROC glad_glXSwapIntervalEXT = NULL; | ||
|  | PFNGLXBINDTEXIMAGEEXTPROC glad_glXBindTexImageEXT = NULL; | ||
|  | PFNGLXRELEASETEXIMAGEEXTPROC glad_glXReleaseTexImageEXT = NULL; | ||
|  | PFNGLXGETAGPOFFSETMESAPROC glad_glXGetAGPOffsetMESA = NULL; | ||
|  | PFNGLXCOPYSUBBUFFERMESAPROC glad_glXCopySubBufferMESA = NULL; | ||
|  | PFNGLXCREATEGLXPIXMAPMESAPROC glad_glXCreateGLXPixmapMESA = NULL; | ||
|  | PFNGLXQUERYCURRENTRENDERERINTEGERMESAPROC glad_glXQueryCurrentRendererIntegerMESA = NULL; | ||
|  | PFNGLXQUERYCURRENTRENDERERSTRINGMESAPROC glad_glXQueryCurrentRendererStringMESA = NULL; | ||
|  | PFNGLXQUERYRENDERERINTEGERMESAPROC glad_glXQueryRendererIntegerMESA = NULL; | ||
|  | PFNGLXQUERYRENDERERSTRINGMESAPROC glad_glXQueryRendererStringMESA = NULL; | ||
|  | PFNGLXRELEASEBUFFERSMESAPROC glad_glXReleaseBuffersMESA = NULL; | ||
|  | PFNGLXSET3DFXMODEMESAPROC glad_glXSet3DfxModeMESA = NULL; | ||
|  | PFNGLXGETSWAPINTERVALMESAPROC glad_glXGetSwapIntervalMESA = NULL; | ||
|  | PFNGLXSWAPINTERVALMESAPROC glad_glXSwapIntervalMESA = NULL; | ||
|  | PFNGLXCOPYBUFFERSUBDATANVPROC glad_glXCopyBufferSubDataNV = NULL; | ||
|  | PFNGLXNAMEDCOPYBUFFERSUBDATANVPROC glad_glXNamedCopyBufferSubDataNV = NULL; | ||
|  | PFNGLXCOPYIMAGESUBDATANVPROC glad_glXCopyImageSubDataNV = NULL; | ||
|  | PFNGLXDELAYBEFORESWAPNVPROC glad_glXDelayBeforeSwapNV = NULL; | ||
|  | PFNGLXENUMERATEVIDEODEVICESNVPROC glad_glXEnumerateVideoDevicesNV = NULL; | ||
|  | PFNGLXBINDVIDEODEVICENVPROC glad_glXBindVideoDeviceNV = NULL; | ||
|  | PFNGLXJOINSWAPGROUPNVPROC glad_glXJoinSwapGroupNV = NULL; | ||
|  | PFNGLXBINDSWAPBARRIERNVPROC glad_glXBindSwapBarrierNV = NULL; | ||
|  | PFNGLXQUERYSWAPGROUPNVPROC glad_glXQuerySwapGroupNV = NULL; | ||
|  | PFNGLXQUERYMAXSWAPGROUPSNVPROC glad_glXQueryMaxSwapGroupsNV = NULL; | ||
|  | PFNGLXQUERYFRAMECOUNTNVPROC glad_glXQueryFrameCountNV = NULL; | ||
|  | PFNGLXRESETFRAMECOUNTNVPROC glad_glXResetFrameCountNV = NULL; | ||
|  | PFNGLXBINDVIDEOCAPTUREDEVICENVPROC glad_glXBindVideoCaptureDeviceNV = NULL; | ||
|  | PFNGLXENUMERATEVIDEOCAPTUREDEVICESNVPROC glad_glXEnumerateVideoCaptureDevicesNV = NULL; | ||
|  | PFNGLXLOCKVIDEOCAPTUREDEVICENVPROC glad_glXLockVideoCaptureDeviceNV = NULL; | ||
|  | PFNGLXQUERYVIDEOCAPTUREDEVICENVPROC glad_glXQueryVideoCaptureDeviceNV = NULL; | ||
|  | PFNGLXRELEASEVIDEOCAPTUREDEVICENVPROC glad_glXReleaseVideoCaptureDeviceNV = NULL; | ||
|  | PFNGLXGETVIDEODEVICENVPROC glad_glXGetVideoDeviceNV = NULL; | ||
|  | PFNGLXRELEASEVIDEODEVICENVPROC glad_glXReleaseVideoDeviceNV = NULL; | ||
|  | PFNGLXBINDVIDEOIMAGENVPROC glad_glXBindVideoImageNV = NULL; | ||
|  | PFNGLXRELEASEVIDEOIMAGENVPROC glad_glXReleaseVideoImageNV = NULL; | ||
|  | PFNGLXSENDPBUFFERTOVIDEONVPROC glad_glXSendPbufferToVideoNV = NULL; | ||
|  | PFNGLXGETVIDEOINFONVPROC glad_glXGetVideoInfoNV = NULL; | ||
|  | PFNGLXGETSYNCVALUESOMLPROC glad_glXGetSyncValuesOML = NULL; | ||
|  | PFNGLXGETMSCRATEOMLPROC glad_glXGetMscRateOML = NULL; | ||
|  | PFNGLXSWAPBUFFERSMSCOMLPROC glad_glXSwapBuffersMscOML = NULL; | ||
|  | PFNGLXWAITFORMSCOMLPROC glad_glXWaitForMscOML = NULL; | ||
|  | PFNGLXWAITFORSBCOMLPROC glad_glXWaitForSbcOML = NULL; | ||
|  | #ifdef _DM_BUFFER_H_
 | ||
|  | PFNGLXASSOCIATEDMPBUFFERSGIXPROC glad_glXAssociateDMPbufferSGIX = NULL; | ||
|  | #endif
 | ||
|  | PFNGLXGETFBCONFIGATTRIBSGIXPROC glad_glXGetFBConfigAttribSGIX = NULL; | ||
|  | PFNGLXCHOOSEFBCONFIGSGIXPROC glad_glXChooseFBConfigSGIX = NULL; | ||
|  | PFNGLXCREATEGLXPIXMAPWITHCONFIGSGIXPROC glad_glXCreateGLXPixmapWithConfigSGIX = NULL; | ||
|  | PFNGLXCREATECONTEXTWITHCONFIGSGIXPROC glad_glXCreateContextWithConfigSGIX = NULL; | ||
|  | PFNGLXGETVISUALFROMFBCONFIGSGIXPROC glad_glXGetVisualFromFBConfigSGIX = NULL; | ||
|  | PFNGLXGETFBCONFIGFROMVISUALSGIXPROC glad_glXGetFBConfigFromVisualSGIX = NULL; | ||
|  | PFNGLXQUERYHYPERPIPENETWORKSGIXPROC glad_glXQueryHyperpipeNetworkSGIX = NULL; | ||
|  | PFNGLXHYPERPIPECONFIGSGIXPROC glad_glXHyperpipeConfigSGIX = NULL; | ||
|  | PFNGLXQUERYHYPERPIPECONFIGSGIXPROC glad_glXQueryHyperpipeConfigSGIX = NULL; | ||
|  | PFNGLXDESTROYHYPERPIPECONFIGSGIXPROC glad_glXDestroyHyperpipeConfigSGIX = NULL; | ||
|  | PFNGLXBINDHYPERPIPESGIXPROC glad_glXBindHyperpipeSGIX = NULL; | ||
|  | PFNGLXQUERYHYPERPIPEBESTATTRIBSGIXPROC glad_glXQueryHyperpipeBestAttribSGIX = NULL; | ||
|  | PFNGLXHYPERPIPEATTRIBSGIXPROC glad_glXHyperpipeAttribSGIX = NULL; | ||
|  | PFNGLXQUERYHYPERPIPEATTRIBSGIXPROC glad_glXQueryHyperpipeAttribSGIX = NULL; | ||
|  | PFNGLXCREATEGLXPBUFFERSGIXPROC glad_glXCreateGLXPbufferSGIX = NULL; | ||
|  | PFNGLXDESTROYGLXPBUFFERSGIXPROC glad_glXDestroyGLXPbufferSGIX = NULL; | ||
|  | PFNGLXQUERYGLXPBUFFERSGIXPROC glad_glXQueryGLXPbufferSGIX = NULL; | ||
|  | PFNGLXSELECTEVENTSGIXPROC glad_glXSelectEventSGIX = NULL; | ||
|  | PFNGLXGETSELECTEDEVENTSGIXPROC glad_glXGetSelectedEventSGIX = NULL; | ||
|  | PFNGLXBINDSWAPBARRIERSGIXPROC glad_glXBindSwapBarrierSGIX = NULL; | ||
|  | PFNGLXQUERYMAXSWAPBARRIERSSGIXPROC glad_glXQueryMaxSwapBarriersSGIX = NULL; | ||
|  | PFNGLXJOINSWAPGROUPSGIXPROC glad_glXJoinSwapGroupSGIX = NULL; | ||
|  | PFNGLXBINDCHANNELTOWINDOWSGIXPROC glad_glXBindChannelToWindowSGIX = NULL; | ||
|  | PFNGLXCHANNELRECTSGIXPROC glad_glXChannelRectSGIX = NULL; | ||
|  | PFNGLXQUERYCHANNELRECTSGIXPROC glad_glXQueryChannelRectSGIX = NULL; | ||
|  | PFNGLXQUERYCHANNELDELTASSGIXPROC glad_glXQueryChannelDeltasSGIX = NULL; | ||
|  | PFNGLXCHANNELRECTSYNCSGIXPROC glad_glXChannelRectSyncSGIX = NULL; | ||
|  | #ifdef _VL_H_
 | ||
|  | PFNGLXCREATEGLXVIDEOSOURCESGIXPROC glad_glXCreateGLXVideoSourceSGIX = NULL; | ||
|  | PFNGLXDESTROYGLXVIDEOSOURCESGIXPROC glad_glXDestroyGLXVideoSourceSGIX = NULL; | ||
|  | #endif
 | ||
|  | PFNGLXCUSHIONSGIPROC glad_glXCushionSGI = NULL; | ||
|  | PFNGLXMAKECURRENTREADSGIPROC glad_glXMakeCurrentReadSGI = NULL; | ||
|  | PFNGLXGETCURRENTREADDRAWABLESGIPROC glad_glXGetCurrentReadDrawableSGI = NULL; | ||
|  | PFNGLXSWAPINTERVALSGIPROC glad_glXSwapIntervalSGI = NULL; | ||
|  | PFNGLXGETVIDEOSYNCSGIPROC glad_glXGetVideoSyncSGI = NULL; | ||
|  | PFNGLXWAITVIDEOSYNCSGIPROC glad_glXWaitVideoSyncSGI = NULL; | ||
|  | PFNGLXGETTRANSPARENTINDEXSUNPROC glad_glXGetTransparentIndexSUN = NULL; | ||
|  | 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 void load_GLX_AMD_gpu_association(GLADloadproc load) { | ||
|  | 	if(!GLAD_GLX_AMD_gpu_association) return; | ||
|  | 	glad_glXGetGPUIDsAMD = (PFNGLXGETGPUIDSAMDPROC)load("glXGetGPUIDsAMD"); | ||
|  | 	glad_glXGetGPUInfoAMD = (PFNGLXGETGPUINFOAMDPROC)load("glXGetGPUInfoAMD"); | ||
|  | 	glad_glXGetContextGPUIDAMD = (PFNGLXGETCONTEXTGPUIDAMDPROC)load("glXGetContextGPUIDAMD"); | ||
|  | 	glad_glXCreateAssociatedContextAMD = (PFNGLXCREATEASSOCIATEDCONTEXTAMDPROC)load("glXCreateAssociatedContextAMD"); | ||
|  | 	glad_glXCreateAssociatedContextAttribsAMD = (PFNGLXCREATEASSOCIATEDCONTEXTATTRIBSAMDPROC)load("glXCreateAssociatedContextAttribsAMD"); | ||
|  | 	glad_glXDeleteAssociatedContextAMD = (PFNGLXDELETEASSOCIATEDCONTEXTAMDPROC)load("glXDeleteAssociatedContextAMD"); | ||
|  | 	glad_glXMakeAssociatedContextCurrentAMD = (PFNGLXMAKEASSOCIATEDCONTEXTCURRENTAMDPROC)load("glXMakeAssociatedContextCurrentAMD"); | ||
|  | 	glad_glXGetCurrentAssociatedContextAMD = (PFNGLXGETCURRENTASSOCIATEDCONTEXTAMDPROC)load("glXGetCurrentAssociatedContextAMD"); | ||
|  | 	glad_glXBlitContextFramebufferAMD = (PFNGLXBLITCONTEXTFRAMEBUFFERAMDPROC)load("glXBlitContextFramebufferAMD"); | ||
|  | } | ||
|  | static void load_GLX_ARB_create_context(GLADloadproc load) { | ||
|  | 	if(!GLAD_GLX_ARB_create_context) return; | ||
|  | 	glad_glXCreateContextAttribsARB = (PFNGLXCREATECONTEXTATTRIBSARBPROC)load("glXCreateContextAttribsARB"); | ||
|  | } | ||
|  | static void load_GLX_ARB_get_proc_address(GLADloadproc load) { | ||
|  | 	if(!GLAD_GLX_ARB_get_proc_address) return; | ||
|  | 	glad_glXGetProcAddressARB = (PFNGLXGETPROCADDRESSARBPROC)load("glXGetProcAddressARB"); | ||
|  | } | ||
|  | static void load_GLX_EXT_import_context(GLADloadproc load) { | ||
|  | 	if(!GLAD_GLX_EXT_import_context) return; | ||
|  | 	glad_glXGetCurrentDisplayEXT = (PFNGLXGETCURRENTDISPLAYEXTPROC)load("glXGetCurrentDisplayEXT"); | ||
|  | 	glad_glXQueryContextInfoEXT = (PFNGLXQUERYCONTEXTINFOEXTPROC)load("glXQueryContextInfoEXT"); | ||
|  | 	glad_glXGetContextIDEXT = (PFNGLXGETCONTEXTIDEXTPROC)load("glXGetContextIDEXT"); | ||
|  | 	glad_glXImportContextEXT = (PFNGLXIMPORTCONTEXTEXTPROC)load("glXImportContextEXT"); | ||
|  | 	glad_glXFreeContextEXT = (PFNGLXFREECONTEXTEXTPROC)load("glXFreeContextEXT"); | ||
|  | } | ||
|  | static void load_GLX_EXT_swap_control(GLADloadproc load) { | ||
|  | 	if(!GLAD_GLX_EXT_swap_control) return; | ||
|  | 	glad_glXSwapIntervalEXT = (PFNGLXSWAPINTERVALEXTPROC)load("glXSwapIntervalEXT"); | ||
|  | } | ||
|  | static void load_GLX_EXT_texture_from_pixmap(GLADloadproc load) { | ||
|  | 	if(!GLAD_GLX_EXT_texture_from_pixmap) return; | ||
|  | 	glad_glXBindTexImageEXT = (PFNGLXBINDTEXIMAGEEXTPROC)load("glXBindTexImageEXT"); | ||
|  | 	glad_glXReleaseTexImageEXT = (PFNGLXRELEASETEXIMAGEEXTPROC)load("glXReleaseTexImageEXT"); | ||
|  | } | ||
|  | static void load_GLX_MESA_agp_offset(GLADloadproc load) { | ||
|  | 	if(!GLAD_GLX_MESA_agp_offset) return; | ||
|  | 	glad_glXGetAGPOffsetMESA = (PFNGLXGETAGPOFFSETMESAPROC)load("glXGetAGPOffsetMESA"); | ||
|  | } | ||
|  | static void load_GLX_MESA_copy_sub_buffer(GLADloadproc load) { | ||
|  | 	if(!GLAD_GLX_MESA_copy_sub_buffer) return; | ||
|  | 	glad_glXCopySubBufferMESA = (PFNGLXCOPYSUBBUFFERMESAPROC)load("glXCopySubBufferMESA"); | ||
|  | } | ||
|  | static void load_GLX_MESA_pixmap_colormap(GLADloadproc load) { | ||
|  | 	if(!GLAD_GLX_MESA_pixmap_colormap) return; | ||
|  | 	glad_glXCreateGLXPixmapMESA = (PFNGLXCREATEGLXPIXMAPMESAPROC)load("glXCreateGLXPixmapMESA"); | ||
|  | } | ||
|  | static void load_GLX_MESA_query_renderer(GLADloadproc load) { | ||
|  | 	if(!GLAD_GLX_MESA_query_renderer) return; | ||
|  | 	glad_glXQueryCurrentRendererIntegerMESA = (PFNGLXQUERYCURRENTRENDERERINTEGERMESAPROC)load("glXQueryCurrentRendererIntegerMESA"); | ||
|  | 	glad_glXQueryCurrentRendererStringMESA = (PFNGLXQUERYCURRENTRENDERERSTRINGMESAPROC)load("glXQueryCurrentRendererStringMESA"); | ||
|  | 	glad_glXQueryRendererIntegerMESA = (PFNGLXQUERYRENDERERINTEGERMESAPROC)load("glXQueryRendererIntegerMESA"); | ||
|  | 	glad_glXQueryRendererStringMESA = (PFNGLXQUERYRENDERERSTRINGMESAPROC)load("glXQueryRendererStringMESA"); | ||
|  | } | ||
|  | static void load_GLX_MESA_release_buffers(GLADloadproc load) { | ||
|  | 	if(!GLAD_GLX_MESA_release_buffers) return; | ||
|  | 	glad_glXReleaseBuffersMESA = (PFNGLXRELEASEBUFFERSMESAPROC)load("glXReleaseBuffersMESA"); | ||
|  | } | ||
|  | static void load_GLX_MESA_set_3dfx_mode(GLADloadproc load) { | ||
|  | 	if(!GLAD_GLX_MESA_set_3dfx_mode) return; | ||
|  | 	glad_glXSet3DfxModeMESA = (PFNGLXSET3DFXMODEMESAPROC)load("glXSet3DfxModeMESA"); | ||
|  | } | ||
|  | static void load_GLX_MESA_swap_control(GLADloadproc load) { | ||
|  | 	if(!GLAD_GLX_MESA_swap_control) return; | ||
|  | 	glad_glXGetSwapIntervalMESA = (PFNGLXGETSWAPINTERVALMESAPROC)load("glXGetSwapIntervalMESA"); | ||
|  | 	glad_glXSwapIntervalMESA = (PFNGLXSWAPINTERVALMESAPROC)load("glXSwapIntervalMESA"); | ||
|  | } | ||
|  | static void load_GLX_NV_copy_buffer(GLADloadproc load) { | ||
|  | 	if(!GLAD_GLX_NV_copy_buffer) return; | ||
|  | 	glad_glXCopyBufferSubDataNV = (PFNGLXCOPYBUFFERSUBDATANVPROC)load("glXCopyBufferSubDataNV"); | ||
|  | 	glad_glXNamedCopyBufferSubDataNV = (PFNGLXNAMEDCOPYBUFFERSUBDATANVPROC)load("glXNamedCopyBufferSubDataNV"); | ||
|  | } | ||
|  | static void load_GLX_NV_copy_image(GLADloadproc load) { | ||
|  | 	if(!GLAD_GLX_NV_copy_image) return; | ||
|  | 	glad_glXCopyImageSubDataNV = (PFNGLXCOPYIMAGESUBDATANVPROC)load("glXCopyImageSubDataNV"); | ||
|  | } | ||
|  | static void load_GLX_NV_delay_before_swap(GLADloadproc load) { | ||
|  | 	if(!GLAD_GLX_NV_delay_before_swap) return; | ||
|  | 	glad_glXDelayBeforeSwapNV = (PFNGLXDELAYBEFORESWAPNVPROC)load("glXDelayBeforeSwapNV"); | ||
|  | } | ||
|  | static void load_GLX_NV_present_video(GLADloadproc load) { | ||
|  | 	if(!GLAD_GLX_NV_present_video) return; | ||
|  | 	glad_glXEnumerateVideoDevicesNV = (PFNGLXENUMERATEVIDEODEVICESNVPROC)load("glXEnumerateVideoDevicesNV"); | ||
|  | 	glad_glXBindVideoDeviceNV = (PFNGLXBINDVIDEODEVICENVPROC)load("glXBindVideoDeviceNV"); | ||
|  | } | ||
|  | static void load_GLX_NV_swap_group(GLADloadproc load) { | ||
|  | 	if(!GLAD_GLX_NV_swap_group) return; | ||
|  | 	glad_glXJoinSwapGroupNV = (PFNGLXJOINSWAPGROUPNVPROC)load("glXJoinSwapGroupNV"); | ||
|  | 	glad_glXBindSwapBarrierNV = (PFNGLXBINDSWAPBARRIERNVPROC)load("glXBindSwapBarrierNV"); | ||
|  | 	glad_glXQuerySwapGroupNV = (PFNGLXQUERYSWAPGROUPNVPROC)load("glXQuerySwapGroupNV"); | ||
|  | 	glad_glXQueryMaxSwapGroupsNV = (PFNGLXQUERYMAXSWAPGROUPSNVPROC)load("glXQueryMaxSwapGroupsNV"); | ||
|  | 	glad_glXQueryFrameCountNV = (PFNGLXQUERYFRAMECOUNTNVPROC)load("glXQueryFrameCountNV"); | ||
|  | 	glad_glXResetFrameCountNV = (PFNGLXRESETFRAMECOUNTNVPROC)load("glXResetFrameCountNV"); | ||
|  | } | ||
|  | static void load_GLX_NV_video_capture(GLADloadproc load) { | ||
|  | 	if(!GLAD_GLX_NV_video_capture) return; | ||
|  | 	glad_glXBindVideoCaptureDeviceNV = (PFNGLXBINDVIDEOCAPTUREDEVICENVPROC)load("glXBindVideoCaptureDeviceNV"); | ||
|  | 	glad_glXEnumerateVideoCaptureDevicesNV = (PFNGLXENUMERATEVIDEOCAPTUREDEVICESNVPROC)load("glXEnumerateVideoCaptureDevicesNV"); | ||
|  | 	glad_glXLockVideoCaptureDeviceNV = (PFNGLXLOCKVIDEOCAPTUREDEVICENVPROC)load("glXLockVideoCaptureDeviceNV"); | ||
|  | 	glad_glXQueryVideoCaptureDeviceNV = (PFNGLXQUERYVIDEOCAPTUREDEVICENVPROC)load("glXQueryVideoCaptureDeviceNV"); | ||
|  | 	glad_glXReleaseVideoCaptureDeviceNV = (PFNGLXRELEASEVIDEOCAPTUREDEVICENVPROC)load("glXReleaseVideoCaptureDeviceNV"); | ||
|  | } | ||
|  | static void load_GLX_NV_video_out(GLADloadproc load) { | ||
|  | 	if(!GLAD_GLX_NV_video_out) return; | ||
|  | 	glad_glXGetVideoDeviceNV = (PFNGLXGETVIDEODEVICENVPROC)load("glXGetVideoDeviceNV"); | ||
|  | 	glad_glXReleaseVideoDeviceNV = (PFNGLXRELEASEVIDEODEVICENVPROC)load("glXReleaseVideoDeviceNV"); | ||
|  | 	glad_glXBindVideoImageNV = (PFNGLXBINDVIDEOIMAGENVPROC)load("glXBindVideoImageNV"); | ||
|  | 	glad_glXReleaseVideoImageNV = (PFNGLXRELEASEVIDEOIMAGENVPROC)load("glXReleaseVideoImageNV"); | ||
|  | 	glad_glXSendPbufferToVideoNV = (PFNGLXSENDPBUFFERTOVIDEONVPROC)load("glXSendPbufferToVideoNV"); | ||
|  | 	glad_glXGetVideoInfoNV = (PFNGLXGETVIDEOINFONVPROC)load("glXGetVideoInfoNV"); | ||
|  | } | ||
|  | static void load_GLX_OML_sync_control(GLADloadproc load) { | ||
|  | 	if(!GLAD_GLX_OML_sync_control) return; | ||
|  | 	glad_glXGetSyncValuesOML = (PFNGLXGETSYNCVALUESOMLPROC)load("glXGetSyncValuesOML"); | ||
|  | 	glad_glXGetMscRateOML = (PFNGLXGETMSCRATEOMLPROC)load("glXGetMscRateOML"); | ||
|  | 	glad_glXSwapBuffersMscOML = (PFNGLXSWAPBUFFERSMSCOMLPROC)load("glXSwapBuffersMscOML"); | ||
|  | 	glad_glXWaitForMscOML = (PFNGLXWAITFORMSCOMLPROC)load("glXWaitForMscOML"); | ||
|  | 	glad_glXWaitForSbcOML = (PFNGLXWAITFORSBCOMLPROC)load("glXWaitForSbcOML"); | ||
|  | } | ||
|  | static void load_GLX_SGIX_dmbuffer(GLADloadproc load) { | ||
|  | 	if(!GLAD_GLX_SGIX_dmbuffer) return; | ||
|  | #ifdef _DM_BUFFER_H_
 | ||
|  | 	glad_glXAssociateDMPbufferSGIX = (PFNGLXASSOCIATEDMPBUFFERSGIXPROC)load("glXAssociateDMPbufferSGIX"); | ||
|  | #else
 | ||
|  | 	(void)load; | ||
|  | #endif
 | ||
|  | } | ||
|  | static void load_GLX_SGIX_fbconfig(GLADloadproc load) { | ||
|  | 	if(!GLAD_GLX_SGIX_fbconfig) return; | ||
|  | 	glad_glXGetFBConfigAttribSGIX = (PFNGLXGETFBCONFIGATTRIBSGIXPROC)load("glXGetFBConfigAttribSGIX"); | ||
|  | 	glad_glXChooseFBConfigSGIX = (PFNGLXCHOOSEFBCONFIGSGIXPROC)load("glXChooseFBConfigSGIX"); | ||
|  | 	glad_glXCreateGLXPixmapWithConfigSGIX = (PFNGLXCREATEGLXPIXMAPWITHCONFIGSGIXPROC)load("glXCreateGLXPixmapWithConfigSGIX"); | ||
|  | 	glad_glXCreateContextWithConfigSGIX = (PFNGLXCREATECONTEXTWITHCONFIGSGIXPROC)load("glXCreateContextWithConfigSGIX"); | ||
|  | 	glad_glXGetVisualFromFBConfigSGIX = (PFNGLXGETVISUALFROMFBCONFIGSGIXPROC)load("glXGetVisualFromFBConfigSGIX"); | ||
|  | 	glad_glXGetFBConfigFromVisualSGIX = (PFNGLXGETFBCONFIGFROMVISUALSGIXPROC)load("glXGetFBConfigFromVisualSGIX"); | ||
|  | } | ||
|  | static void load_GLX_SGIX_hyperpipe(GLADloadproc load) { | ||
|  | 	if(!GLAD_GLX_SGIX_hyperpipe) return; | ||
|  | 	glad_glXQueryHyperpipeNetworkSGIX = (PFNGLXQUERYHYPERPIPENETWORKSGIXPROC)load("glXQueryHyperpipeNetworkSGIX"); | ||
|  | 	glad_glXHyperpipeConfigSGIX = (PFNGLXHYPERPIPECONFIGSGIXPROC)load("glXHyperpipeConfigSGIX"); | ||
|  | 	glad_glXQueryHyperpipeConfigSGIX = (PFNGLXQUERYHYPERPIPECONFIGSGIXPROC)load("glXQueryHyperpipeConfigSGIX"); | ||
|  | 	glad_glXDestroyHyperpipeConfigSGIX = (PFNGLXDESTROYHYPERPIPECONFIGSGIXPROC)load("glXDestroyHyperpipeConfigSGIX"); | ||
|  | 	glad_glXBindHyperpipeSGIX = (PFNGLXBINDHYPERPIPESGIXPROC)load("glXBindHyperpipeSGIX"); | ||
|  | 	glad_glXQueryHyperpipeBestAttribSGIX = (PFNGLXQUERYHYPERPIPEBESTATTRIBSGIXPROC)load("glXQueryHyperpipeBestAttribSGIX"); | ||
|  | 	glad_glXHyperpipeAttribSGIX = (PFNGLXHYPERPIPEATTRIBSGIXPROC)load("glXHyperpipeAttribSGIX"); | ||
|  | 	glad_glXQueryHyperpipeAttribSGIX = (PFNGLXQUERYHYPERPIPEATTRIBSGIXPROC)load("glXQueryHyperpipeAttribSGIX"); | ||
|  | } | ||
|  | static void load_GLX_SGIX_pbuffer(GLADloadproc load) { | ||
|  | 	if(!GLAD_GLX_SGIX_pbuffer) return; | ||
|  | 	glad_glXCreateGLXPbufferSGIX = (PFNGLXCREATEGLXPBUFFERSGIXPROC)load("glXCreateGLXPbufferSGIX"); | ||
|  | 	glad_glXDestroyGLXPbufferSGIX = (PFNGLXDESTROYGLXPBUFFERSGIXPROC)load("glXDestroyGLXPbufferSGIX"); | ||
|  | 	glad_glXQueryGLXPbufferSGIX = (PFNGLXQUERYGLXPBUFFERSGIXPROC)load("glXQueryGLXPbufferSGIX"); | ||
|  | 	glad_glXSelectEventSGIX = (PFNGLXSELECTEVENTSGIXPROC)load("glXSelectEventSGIX"); | ||
|  | 	glad_glXGetSelectedEventSGIX = (PFNGLXGETSELECTEDEVENTSGIXPROC)load("glXGetSelectedEventSGIX"); | ||
|  | } | ||
|  | static void load_GLX_SGIX_swap_barrier(GLADloadproc load) { | ||
|  | 	if(!GLAD_GLX_SGIX_swap_barrier) return; | ||
|  | 	glad_glXBindSwapBarrierSGIX = (PFNGLXBINDSWAPBARRIERSGIXPROC)load("glXBindSwapBarrierSGIX"); | ||
|  | 	glad_glXQueryMaxSwapBarriersSGIX = (PFNGLXQUERYMAXSWAPBARRIERSSGIXPROC)load("glXQueryMaxSwapBarriersSGIX"); | ||
|  | } | ||
|  | static void load_GLX_SGIX_swap_group(GLADloadproc load) { | ||
|  | 	if(!GLAD_GLX_SGIX_swap_group) return; | ||
|  | 	glad_glXJoinSwapGroupSGIX = (PFNGLXJOINSWAPGROUPSGIXPROC)load("glXJoinSwapGroupSGIX"); | ||
|  | } | ||
|  | static void load_GLX_SGIX_video_resize(GLADloadproc load) { | ||
|  | 	if(!GLAD_GLX_SGIX_video_resize) return; | ||
|  | 	glad_glXBindChannelToWindowSGIX = (PFNGLXBINDCHANNELTOWINDOWSGIXPROC)load("glXBindChannelToWindowSGIX"); | ||
|  | 	glad_glXChannelRectSGIX = (PFNGLXCHANNELRECTSGIXPROC)load("glXChannelRectSGIX"); | ||
|  | 	glad_glXQueryChannelRectSGIX = (PFNGLXQUERYCHANNELRECTSGIXPROC)load("glXQueryChannelRectSGIX"); | ||
|  | 	glad_glXQueryChannelDeltasSGIX = (PFNGLXQUERYCHANNELDELTASSGIXPROC)load("glXQueryChannelDeltasSGIX"); | ||
|  | 	glad_glXChannelRectSyncSGIX = (PFNGLXCHANNELRECTSYNCSGIXPROC)load("glXChannelRectSyncSGIX"); | ||
|  | } | ||
|  | static void load_GLX_SGIX_video_source(GLADloadproc load) { | ||
|  | 	if(!GLAD_GLX_SGIX_video_source) return; | ||
|  | #ifdef _VL_H_
 | ||
|  | 	glad_glXCreateGLXVideoSourceSGIX = (PFNGLXCREATEGLXVIDEOSOURCESGIXPROC)load("glXCreateGLXVideoSourceSGIX"); | ||
|  | 	glad_glXDestroyGLXVideoSourceSGIX = (PFNGLXDESTROYGLXVIDEOSOURCESGIXPROC)load("glXDestroyGLXVideoSourceSGIX"); | ||
|  | #else
 | ||
|  | 	(void)load; | ||
|  | #endif
 | ||
|  | } | ||
|  | static void load_GLX_SGI_cushion(GLADloadproc load) { | ||
|  | 	if(!GLAD_GLX_SGI_cushion) return; | ||
|  | 	glad_glXCushionSGI = (PFNGLXCUSHIONSGIPROC)load("glXCushionSGI"); | ||
|  | } | ||
|  | static void load_GLX_SGI_make_current_read(GLADloadproc load) { | ||
|  | 	if(!GLAD_GLX_SGI_make_current_read) return; | ||
|  | 	glad_glXMakeCurrentReadSGI = (PFNGLXMAKECURRENTREADSGIPROC)load("glXMakeCurrentReadSGI"); | ||
|  | 	glad_glXGetCurrentReadDrawableSGI = (PFNGLXGETCURRENTREADDRAWABLESGIPROC)load("glXGetCurrentReadDrawableSGI"); | ||
|  | } | ||
|  | static void load_GLX_SGI_swap_control(GLADloadproc load) { | ||
|  | 	if(!GLAD_GLX_SGI_swap_control) return; | ||
|  | 	glad_glXSwapIntervalSGI = (PFNGLXSWAPINTERVALSGIPROC)load("glXSwapIntervalSGI"); | ||
|  | } | ||
|  | static void load_GLX_SGI_video_sync(GLADloadproc load) { | ||
|  | 	if(!GLAD_GLX_SGI_video_sync) return; | ||
|  | 	glad_glXGetVideoSyncSGI = (PFNGLXGETVIDEOSYNCSGIPROC)load("glXGetVideoSyncSGI"); | ||
|  | 	glad_glXWaitVideoSyncSGI = (PFNGLXWAITVIDEOSYNCSGIPROC)load("glXWaitVideoSyncSGI"); | ||
|  | } | ||
|  | static void load_GLX_SUN_get_transparent_index(GLADloadproc load) { | ||
|  | 	if(!GLAD_GLX_SUN_get_transparent_index) return; | ||
|  | 	glad_glXGetTransparentIndexSUN = (PFNGLXGETTRANSPARENTINDEXSUNPROC)load("glXGetTransparentIndexSUN"); | ||
|  | } | ||
|  | static int find_extensionsGLX(void) { | ||
|  | 	if (!get_exts()) return 0; | ||
|  | 	GLAD_GLX_3DFX_multisample = has_ext("GLX_3DFX_multisample"); | ||
|  | 	GLAD_GLX_AMD_gpu_association = has_ext("GLX_AMD_gpu_association"); | ||
|  | 	GLAD_GLX_ARB_context_flush_control = has_ext("GLX_ARB_context_flush_control"); | ||
|  | 	GLAD_GLX_ARB_create_context = has_ext("GLX_ARB_create_context"); | ||
|  | 	GLAD_GLX_ARB_create_context_no_error = has_ext("GLX_ARB_create_context_no_error"); | ||
|  | 	GLAD_GLX_ARB_create_context_profile = has_ext("GLX_ARB_create_context_profile"); | ||
|  | 	GLAD_GLX_ARB_create_context_robustness = has_ext("GLX_ARB_create_context_robustness"); | ||
|  | 	GLAD_GLX_ARB_fbconfig_float = has_ext("GLX_ARB_fbconfig_float"); | ||
|  | 	GLAD_GLX_ARB_framebuffer_sRGB = has_ext("GLX_ARB_framebuffer_sRGB"); | ||
|  | 	GLAD_GLX_ARB_get_proc_address = has_ext("GLX_ARB_get_proc_address"); | ||
|  | 	GLAD_GLX_ARB_multisample = has_ext("GLX_ARB_multisample"); | ||
|  | 	GLAD_GLX_ARB_robustness_application_isolation = has_ext("GLX_ARB_robustness_application_isolation"); | ||
|  | 	GLAD_GLX_ARB_robustness_share_group_isolation = has_ext("GLX_ARB_robustness_share_group_isolation"); | ||
|  | 	GLAD_GLX_ARB_vertex_buffer_object = has_ext("GLX_ARB_vertex_buffer_object"); | ||
|  | 	GLAD_GLX_EXT_buffer_age = has_ext("GLX_EXT_buffer_age"); | ||
|  | 	GLAD_GLX_EXT_context_priority = has_ext("GLX_EXT_context_priority"); | ||
|  | 	GLAD_GLX_EXT_create_context_es2_profile = has_ext("GLX_EXT_create_context_es2_profile"); | ||
|  | 	GLAD_GLX_EXT_create_context_es_profile = has_ext("GLX_EXT_create_context_es_profile"); | ||
|  | 	GLAD_GLX_EXT_fbconfig_packed_float = has_ext("GLX_EXT_fbconfig_packed_float"); | ||
|  | 	GLAD_GLX_EXT_framebuffer_sRGB = has_ext("GLX_EXT_framebuffer_sRGB"); | ||
|  | 	GLAD_GLX_EXT_import_context = has_ext("GLX_EXT_import_context"); | ||
|  | 	GLAD_GLX_EXT_libglvnd = has_ext("GLX_EXT_libglvnd"); | ||
|  | 	GLAD_GLX_EXT_no_config_context = has_ext("GLX_EXT_no_config_context"); | ||
|  | 	GLAD_GLX_EXT_stereo_tree = has_ext("GLX_EXT_stereo_tree"); | ||
|  | 	GLAD_GLX_EXT_swap_control = has_ext("GLX_EXT_swap_control"); | ||
|  | 	GLAD_GLX_EXT_swap_control_tear = has_ext("GLX_EXT_swap_control_tear"); | ||
|  | 	GLAD_GLX_EXT_texture_from_pixmap = has_ext("GLX_EXT_texture_from_pixmap"); | ||
|  | 	GLAD_GLX_EXT_visual_info = has_ext("GLX_EXT_visual_info"); | ||
|  | 	GLAD_GLX_EXT_visual_rating = has_ext("GLX_EXT_visual_rating"); | ||
|  | 	GLAD_GLX_INTEL_swap_event = has_ext("GLX_INTEL_swap_event"); | ||
|  | 	GLAD_GLX_MESA_agp_offset = has_ext("GLX_MESA_agp_offset"); | ||
|  | 	GLAD_GLX_MESA_copy_sub_buffer = has_ext("GLX_MESA_copy_sub_buffer"); | ||
|  | 	GLAD_GLX_MESA_pixmap_colormap = has_ext("GLX_MESA_pixmap_colormap"); | ||
|  | 	GLAD_GLX_MESA_query_renderer = has_ext("GLX_MESA_query_renderer"); | ||
|  | 	GLAD_GLX_MESA_release_buffers = has_ext("GLX_MESA_release_buffers"); | ||
|  | 	GLAD_GLX_MESA_set_3dfx_mode = has_ext("GLX_MESA_set_3dfx_mode"); | ||
|  | 	GLAD_GLX_MESA_swap_control = has_ext("GLX_MESA_swap_control"); | ||
|  | 	GLAD_GLX_NV_copy_buffer = has_ext("GLX_NV_copy_buffer"); | ||
|  | 	GLAD_GLX_NV_copy_image = has_ext("GLX_NV_copy_image"); | ||
|  | 	GLAD_GLX_NV_delay_before_swap = has_ext("GLX_NV_delay_before_swap"); | ||
|  | 	GLAD_GLX_NV_float_buffer = has_ext("GLX_NV_float_buffer"); | ||
|  | 	GLAD_GLX_NV_multigpu_context = has_ext("GLX_NV_multigpu_context"); | ||
|  | 	GLAD_GLX_NV_multisample_coverage = has_ext("GLX_NV_multisample_coverage"); | ||
|  | 	GLAD_GLX_NV_present_video = has_ext("GLX_NV_present_video"); | ||
|  | 	GLAD_GLX_NV_robustness_video_memory_purge = has_ext("GLX_NV_robustness_video_memory_purge"); | ||
|  | 	GLAD_GLX_NV_swap_group = has_ext("GLX_NV_swap_group"); | ||
|  | 	GLAD_GLX_NV_video_capture = has_ext("GLX_NV_video_capture"); | ||
|  | 	GLAD_GLX_NV_video_out = has_ext("GLX_NV_video_out"); | ||
|  | 	GLAD_GLX_OML_swap_method = has_ext("GLX_OML_swap_method"); | ||
|  | 	GLAD_GLX_OML_sync_control = has_ext("GLX_OML_sync_control"); | ||
|  | 	GLAD_GLX_SGIS_blended_overlay = has_ext("GLX_SGIS_blended_overlay"); | ||
|  | 	GLAD_GLX_SGIS_multisample = has_ext("GLX_SGIS_multisample"); | ||
|  | 	GLAD_GLX_SGIS_shared_multisample = has_ext("GLX_SGIS_shared_multisample"); | ||
|  | 	GLAD_GLX_SGIX_dmbuffer = has_ext("GLX_SGIX_dmbuffer"); | ||
|  | 	GLAD_GLX_SGIX_fbconfig = has_ext("GLX_SGIX_fbconfig"); | ||
|  | 	GLAD_GLX_SGIX_hyperpipe = has_ext("GLX_SGIX_hyperpipe"); | ||
|  | 	GLAD_GLX_SGIX_pbuffer = has_ext("GLX_SGIX_pbuffer"); | ||
|  | 	GLAD_GLX_SGIX_swap_barrier = has_ext("GLX_SGIX_swap_barrier"); | ||
|  | 	GLAD_GLX_SGIX_swap_group = has_ext("GLX_SGIX_swap_group"); | ||
|  | 	GLAD_GLX_SGIX_video_resize = has_ext("GLX_SGIX_video_resize"); | ||
|  | 	GLAD_GLX_SGIX_video_source = has_ext("GLX_SGIX_video_source"); | ||
|  | 	GLAD_GLX_SGIX_visual_select_group = has_ext("GLX_SGIX_visual_select_group"); | ||
|  | 	GLAD_GLX_SGI_cushion = has_ext("GLX_SGI_cushion"); | ||
|  | 	GLAD_GLX_SGI_make_current_read = has_ext("GLX_SGI_make_current_read"); | ||
|  | 	GLAD_GLX_SGI_swap_control = has_ext("GLX_SGI_swap_control"); | ||
|  | 	GLAD_GLX_SGI_video_sync = has_ext("GLX_SGI_video_sync"); | ||
|  | 	GLAD_GLX_SUN_get_transparent_index = has_ext("GLX_SUN_get_transparent_index"); | ||
|  | 	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; | ||
|  | 	load_GLX_AMD_gpu_association(load); | ||
|  | 	load_GLX_ARB_create_context(load); | ||
|  | 	load_GLX_ARB_get_proc_address(load); | ||
|  | 	load_GLX_EXT_import_context(load); | ||
|  | 	load_GLX_EXT_swap_control(load); | ||
|  | 	load_GLX_EXT_texture_from_pixmap(load); | ||
|  | 	load_GLX_MESA_agp_offset(load); | ||
|  | 	load_GLX_MESA_copy_sub_buffer(load); | ||
|  | 	load_GLX_MESA_pixmap_colormap(load); | ||
|  | 	load_GLX_MESA_query_renderer(load); | ||
|  | 	load_GLX_MESA_release_buffers(load); | ||
|  | 	load_GLX_MESA_set_3dfx_mode(load); | ||
|  | 	load_GLX_MESA_swap_control(load); | ||
|  | 	load_GLX_NV_copy_buffer(load); | ||
|  | 	load_GLX_NV_copy_image(load); | ||
|  | 	load_GLX_NV_delay_before_swap(load); | ||
|  | 	load_GLX_NV_present_video(load); | ||
|  | 	load_GLX_NV_swap_group(load); | ||
|  | 	load_GLX_NV_video_capture(load); | ||
|  | 	load_GLX_NV_video_out(load); | ||
|  | 	load_GLX_OML_sync_control(load); | ||
|  | 	load_GLX_SGIX_dmbuffer(load); | ||
|  | 	load_GLX_SGIX_fbconfig(load); | ||
|  | 	load_GLX_SGIX_hyperpipe(load); | ||
|  | 	load_GLX_SGIX_pbuffer(load); | ||
|  | 	load_GLX_SGIX_swap_barrier(load); | ||
|  | 	load_GLX_SGIX_swap_group(load); | ||
|  | 	load_GLX_SGIX_video_resize(load); | ||
|  | 	load_GLX_SGIX_video_source(load); | ||
|  | 	load_GLX_SGI_cushion(load); | ||
|  | 	load_GLX_SGI_make_current_read(load); | ||
|  | 	load_GLX_SGI_swap_control(load); | ||
|  | 	load_GLX_SGI_video_sync(load); | ||
|  | 	load_GLX_SUN_get_transparent_index(load); | ||
|  | 	return 1; | ||
|  | } | ||
|  | 
 |