diff --git a/CMakeLists.txt b/CMakeLists.txt index a32240fd9..24a141659 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1165,9 +1165,7 @@ if(USE_OPENGL) core/wsi/osx.cpp core/wsi/osx.h core/wsi/sdl.cpp - core/wsi/sdl.h - core/wsi/xgl.cpp - core/wsi/xgl.h) + core/wsi/sdl.h) target_sources(${PROJECT_NAME} PRIVATE core/rend/gles/glcache.h @@ -1483,13 +1481,9 @@ endif() if((USE_OPENGL OR USE_GLES2 OR USE_GLES) AND NOT LIBRETRO) add_library(glad STATIC core/deps/glad/src/gl.c) - if(NOT SDL2_FOUND) - if(X11_FOUND) - target_sources(glad PRIVATE core/deps/glad/src/glx.c) - endif() - if(ANDROID OR USE_GLES2 OR USE_GLES) - target_sources(glad PRIVATE core/deps/glad/src/egl.c) - endif() + if(NOT APPLE AND NOT WIN32 AND NOT SDL2_FOUND) + # When SDL2 is not found, we can use EGL with ANativeWindow (Android), DispmanX (Raspberry Pi) or X11 + target_sources(glad PRIVATE core/deps/glad/src/egl.c) endif() target_include_directories(glad PUBLIC core/deps/glad/include) target_link_libraries(${PROJECT_NAME} PRIVATE glad) diff --git a/core/deps/glad/include/glad/glx.h b/core/deps/glad/include/glad/glx.h deleted file mode 100644 index 727aa1cc5..000000000 --- a/core/deps/glad/include/glad/glx.h +++ /dev/null @@ -1,601 +0,0 @@ -/** - * Loader generated by glad 2.0.4 on Sat Jan 20 11:00:00 2024 - * - * SPDX-License-Identifier: (WTFPL OR CC0-1.0) AND Apache-2.0 - * - * Generator: C/C++ - * Specification: glx - * Extensions: 5 - * - * APIs: - * - glx=1.4 - * - * Options: - * - ALIAS = False - * - DEBUG = False - * - HEADER_ONLY = False - * - LOADER = True - * - MX = False - * - ON_DEMAND = False - * - * Commandline: - * --api='glx=1.4' --extensions='GLX_ARB_create_context,GLX_ARB_create_context_profile,GLX_ARB_get_proc_address,GLX_EXT_swap_control,GLX_MESA_swap_control' c --loader - * - * Online: - * http://glad.sh/#api=glx%3D1.4&extensions=GLX_ARB_create_context%2CGLX_ARB_create_context_profile%2CGLX_ARB_get_proc_address%2CGLX_EXT_swap_control%2CGLX_MESA_swap_control&generator=c&options=LOADER - * - */ - -#ifndef GLAD_GLX_H_ -#define GLAD_GLX_H_ - -#ifdef GLX_H - #error GLX header already included (API: glx), remove previous include! -#endif -#define GLX_H 1 - - -#include -#include -#include - -#include - -#define GLAD_GLX -#define GLAD_OPTION_GLX_LOADER - -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef GLAD_PLATFORM_H_ -#define GLAD_PLATFORM_H_ - -#ifndef GLAD_PLATFORM_WIN32 - #if defined(_WIN32) || defined(__WIN32__) || defined(WIN32) || defined(__MINGW32__) - #define GLAD_PLATFORM_WIN32 1 - #else - #define GLAD_PLATFORM_WIN32 0 - #endif -#endif - -#ifndef GLAD_PLATFORM_APPLE - #ifdef __APPLE__ - #define GLAD_PLATFORM_APPLE 1 - #else - #define GLAD_PLATFORM_APPLE 0 - #endif -#endif - -#ifndef GLAD_PLATFORM_EMSCRIPTEN - #ifdef __EMSCRIPTEN__ - #define GLAD_PLATFORM_EMSCRIPTEN 1 - #else - #define GLAD_PLATFORM_EMSCRIPTEN 0 - #endif -#endif - -#ifndef GLAD_PLATFORM_UWP - #if defined(_MSC_VER) && !defined(GLAD_INTERNAL_HAVE_WINAPIFAMILY) - #ifdef __has_include - #if __has_include() - #define GLAD_INTERNAL_HAVE_WINAPIFAMILY 1 - #endif - #elif _MSC_VER >= 1700 && !_USING_V110_SDK71_ - #define GLAD_INTERNAL_HAVE_WINAPIFAMILY 1 - #endif - #endif - - #ifdef GLAD_INTERNAL_HAVE_WINAPIFAMILY - #include - #if !WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) && WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP) - #define GLAD_PLATFORM_UWP 1 - #endif - #endif - - #ifndef GLAD_PLATFORM_UWP - #define GLAD_PLATFORM_UWP 0 - #endif -#endif - -#ifdef __GNUC__ - #define GLAD_GNUC_EXTENSION __extension__ -#else - #define GLAD_GNUC_EXTENSION -#endif - -#define GLAD_UNUSED(x) (void)(x) - -#ifndef GLAD_API_CALL - #if defined(GLAD_API_CALL_EXPORT) - #if GLAD_PLATFORM_WIN32 || defined(__CYGWIN__) - #if defined(GLAD_API_CALL_EXPORT_BUILD) - #if defined(__GNUC__) - #define GLAD_API_CALL __attribute__ ((dllexport)) extern - #else - #define GLAD_API_CALL __declspec(dllexport) extern - #endif - #else - #if defined(__GNUC__) - #define GLAD_API_CALL __attribute__ ((dllimport)) extern - #else - #define GLAD_API_CALL __declspec(dllimport) extern - #endif - #endif - #elif defined(__GNUC__) && defined(GLAD_API_CALL_EXPORT_BUILD) - #define GLAD_API_CALL __attribute__ ((visibility ("default"))) extern - #else - #define GLAD_API_CALL extern - #endif - #else - #define GLAD_API_CALL extern - #endif -#endif - -#ifdef APIENTRY - #define GLAD_API_PTR APIENTRY -#elif GLAD_PLATFORM_WIN32 - #define GLAD_API_PTR __stdcall -#else - #define GLAD_API_PTR -#endif - -#ifndef GLAPI -#define GLAPI GLAD_API_CALL -#endif - -#ifndef GLAPIENTRY -#define GLAPIENTRY GLAD_API_PTR -#endif - -#define GLAD_MAKE_VERSION(major, minor) (major * 10000 + minor) -#define GLAD_VERSION_MAJOR(version) (version / 10000) -#define GLAD_VERSION_MINOR(version) (version % 10000) - -#define GLAD_GENERATOR_VERSION "2.0.4" - -typedef void (*GLADapiproc)(void); - -typedef GLADapiproc (*GLADloadfunc)(const char *name); -typedef GLADapiproc (*GLADuserptrloadfunc)(void *userptr, const char *name); - -typedef void (*GLADprecallback)(const char *name, GLADapiproc apiproc, int len_args, ...); -typedef void (*GLADpostcallback)(void *ret, const char *name, GLADapiproc apiproc, int len_args, ...); - -#endif /* GLAD_PLATFORM_H_ */ - -#define GLX_ACCUM_ALPHA_SIZE 17 -#define GLX_ACCUM_BLUE_SIZE 16 -#define GLX_ACCUM_BUFFER_BIT 0x00000080 -#define GLX_ACCUM_GREEN_SIZE 15 -#define GLX_ACCUM_RED_SIZE 14 -#define GLX_ALPHA_SIZE 11 -#define GLX_AUX_BUFFERS 7 -#define GLX_AUX_BUFFERS_BIT 0x00000010 -#define GLX_BACK_LEFT_BUFFER_BIT 0x00000004 -#define GLX_BACK_RIGHT_BUFFER_BIT 0x00000008 -#define GLX_BAD_ATTRIBUTE 2 -#define GLX_BAD_CONTEXT 5 -#define GLX_BAD_ENUM 7 -#define GLX_BAD_SCREEN 1 -#define GLX_BAD_VALUE 6 -#define GLX_BAD_VISUAL 4 -#define GLX_BLUE_SIZE 10 -#define GLX_BUFFER_SIZE 2 -#define GLX_BufferSwapComplete 1 -#define GLX_COLOR_INDEX_BIT 0x00000002 -#define GLX_COLOR_INDEX_TYPE 0x8015 -#define GLX_CONFIG_CAVEAT 0x20 -#define GLX_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB 0x00000002 -#define GLX_CONTEXT_CORE_PROFILE_BIT_ARB 0x00000001 -#define GLX_CONTEXT_DEBUG_BIT_ARB 0x00000001 -#define GLX_CONTEXT_FLAGS_ARB 0x2094 -#define GLX_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB 0x00000002 -#define GLX_CONTEXT_MAJOR_VERSION_ARB 0x2091 -#define GLX_CONTEXT_MINOR_VERSION_ARB 0x2092 -#define GLX_CONTEXT_PROFILE_MASK_ARB 0x9126 -#define GLX_DAMAGED 0x8020 -#define GLX_DEPTH_BUFFER_BIT 0x00000020 -#define GLX_DEPTH_SIZE 12 -#define GLX_DIRECT_COLOR 0x8003 -#define GLX_DONT_CARE 0xFFFFFFFF -#define GLX_DOUBLEBUFFER 5 -#define GLX_DRAWABLE_TYPE 0x8010 -#define GLX_EVENT_MASK 0x801F -#define GLX_EXTENSIONS 0x3 -#define GLX_EXTENSION_NAME "GLX" -#define GLX_FBCONFIG_ID 0x8013 -#define GLX_FRONT_LEFT_BUFFER_BIT 0x00000001 -#define GLX_FRONT_RIGHT_BUFFER_BIT 0x00000002 -#define GLX_GRAY_SCALE 0x8006 -#define GLX_GREEN_SIZE 9 -#define GLX_HEIGHT 0x801E -#define GLX_LARGEST_PBUFFER 0x801C -#define GLX_LEVEL 3 -#define GLX_MAX_PBUFFER_HEIGHT 0x8017 -#define GLX_MAX_PBUFFER_PIXELS 0x8018 -#define GLX_MAX_PBUFFER_WIDTH 0x8016 -#define GLX_MAX_SWAP_INTERVAL_EXT 0x20F2 -#define GLX_NONE 0x8000 -#define GLX_NON_CONFORMANT_CONFIG 0x800D -#define GLX_NO_EXTENSION 3 -#define GLX_PBUFFER 0x8023 -#define GLX_PBUFFER_BIT 0x00000004 -#define GLX_PBUFFER_CLOBBER_MASK 0x08000000 -#define GLX_PBUFFER_HEIGHT 0x8040 -#define GLX_PBUFFER_WIDTH 0x8041 -#define GLX_PIXMAP_BIT 0x00000002 -#define GLX_PRESERVED_CONTENTS 0x801B -#define GLX_PSEUDO_COLOR 0x8004 -#define GLX_PbufferClobber 0 -#define GLX_RED_SIZE 8 -#define GLX_RENDER_TYPE 0x8011 -#define GLX_RGBA 4 -#define GLX_RGBA_BIT 0x00000001 -#define GLX_RGBA_TYPE 0x8014 -#define GLX_SAMPLES 100001 -#define GLX_SAMPLE_BUFFERS 100000 -#define GLX_SAVED 0x8021 -#define GLX_SCREEN 0x800C -#define GLX_SLOW_CONFIG 0x8001 -#define GLX_STATIC_COLOR 0x8005 -#define GLX_STATIC_GRAY 0x8007 -#define GLX_STENCIL_BUFFER_BIT 0x00000040 -#define GLX_STENCIL_SIZE 13 -#define GLX_STEREO 6 -#define GLX_SWAP_INTERVAL_EXT 0x20F1 -#define GLX_TRANSPARENT_ALPHA_VALUE 0x28 -#define GLX_TRANSPARENT_BLUE_VALUE 0x27 -#define GLX_TRANSPARENT_GREEN_VALUE 0x26 -#define GLX_TRANSPARENT_INDEX 0x8009 -#define GLX_TRANSPARENT_INDEX_VALUE 0x24 -#define GLX_TRANSPARENT_RED_VALUE 0x25 -#define GLX_TRANSPARENT_RGB 0x8008 -#define GLX_TRANSPARENT_TYPE 0x23 -#define GLX_TRUE_COLOR 0x8002 -#define GLX_USE_GL 1 -#define GLX_VENDOR 0x1 -#define GLX_VERSION 0x2 -#define GLX_VISUAL_ID 0x800B -#define GLX_WIDTH 0x801D -#define GLX_WINDOW 0x8022 -#define GLX_WINDOW_BIT 0x00000001 -#define GLX_X_RENDERABLE 0x8012 -#define GLX_X_VISUAL_TYPE 0x22 -#define __GLX_NUMBER_EVENTS 17 - - -#ifndef GLEXT_64_TYPES_DEFINED -/* This code block is duplicated in glext.h, so must be protected */ -#define GLEXT_64_TYPES_DEFINED -/* Define int32_t, int64_t, and uint64_t types for UST/MSC */ -/* (as used in the GLX_OML_sync_control extension). */ -#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L -#include -#elif defined(__sun__) || defined(__digital__) -#include -#if defined(__STDC__) -#if defined(__arch64__) || defined(_LP64) -typedef long int int64_t; -typedef unsigned long int uint64_t; -#else -typedef long long int int64_t; -typedef unsigned long long int uint64_t; -#endif /* __arch64__ */ -#endif /* __STDC__ */ -#elif defined( __VMS ) || defined(__sgi) -#include -#elif defined(__SCO__) || defined(__USLC__) -#include -#elif defined(__UNIXOS2__) || defined(__SOL64__) -typedef long int int32_t; -typedef long long int int64_t; -typedef unsigned long long int uint64_t; -#elif defined(_WIN32) && defined(__GNUC__) -#include -#elif defined(_WIN32) -typedef __int32 int32_t; -typedef __int64 int64_t; -typedef unsigned __int64 uint64_t; -#else -/* Fallback if nothing above works */ -#include -#endif -#endif - - - - - - - - - - - - - - - - - -#if defined(__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__) && (__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ > 1060) - -#else - -#endif - -#if defined(__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__) && (__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ > 1060) - -#else - -#endif - - - - - - - -typedef XID GLXFBConfigID; -typedef struct __GLXFBConfigRec *GLXFBConfig; -typedef XID GLXContextID; -typedef struct __GLXcontextRec *GLXContext; -typedef XID GLXPixmap; -typedef XID GLXDrawable; -typedef XID GLXWindow; -typedef XID GLXPbuffer; -typedef void (GLAD_API_PTR *__GLXextFuncPtr)(void); -typedef XID GLXVideoCaptureDeviceNV; -typedef unsigned int GLXVideoDeviceNV; -typedef XID GLXVideoSourceSGIX; -typedef XID GLXFBConfigIDSGIX; -typedef struct __GLXFBConfigRec *GLXFBConfigSGIX; -typedef XID GLXPbufferSGIX; -typedef struct { - int event_type; /* GLX_DAMAGED or GLX_SAVED */ - int draw_type; /* GLX_WINDOW or GLX_PBUFFER */ - unsigned long serial; /* # of last request processed by server */ - Bool send_event; /* true if this came for SendEvent request */ - Display *display; /* display the event was read from */ - GLXDrawable drawable; /* XID of Drawable */ - unsigned int buffer_mask; /* mask indicating which buffers are affected */ - unsigned int aux_buffer; /* which aux buffer was affected */ - int x, y; - int width, height; - int count; /* if nonzero, at least this many more */ -} GLXPbufferClobberEvent; -typedef struct { - int type; - unsigned long serial; /* # of last request processed by server */ - Bool send_event; /* true if this came from a SendEvent request */ - Display *display; /* Display the event was read from */ - GLXDrawable drawable; /* drawable on which event was requested in event mask */ - int event_type; - int64_t ust; - int64_t msc; - int64_t sbc; -} GLXBufferSwapComplete; -typedef union __GLXEvent { - GLXPbufferClobberEvent glxpbufferclobber; - GLXBufferSwapComplete glxbufferswapcomplete; - long pad[24]; -} GLXEvent; -typedef struct { - int type; - unsigned long serial; - Bool send_event; - Display *display; - int extension; - int evtype; - GLXDrawable window; - Bool stereo_tree; -} GLXStereoNotifyEventEXT; -typedef struct { - int type; - unsigned long serial; /* # of last request processed by server */ - Bool send_event; /* true if this came for SendEvent request */ - Display *display; /* display the event was read from */ - GLXDrawable drawable; /* i.d. of Drawable */ - int event_type; /* GLX_DAMAGED_SGIX or GLX_SAVED_SGIX */ - int draw_type; /* GLX_WINDOW_SGIX or GLX_PBUFFER_SGIX */ - unsigned int mask; /* mask indicating which buffers are affected*/ - int x, y; - int width, height; - int count; /* if nonzero, at least this many more */ -} GLXBufferClobberEventSGIX; -typedef struct { - char pipeName[80]; /* Should be [GLX_HYPERPIPE_PIPE_NAME_LENGTH_SGIX] */ - int networkId; -} GLXHyperpipeNetworkSGIX; -typedef struct { - char pipeName[80]; /* Should be [GLX_HYPERPIPE_PIPE_NAME_LENGTH_SGIX] */ - int channel; - unsigned int participationType; - int timeSlice; -} GLXHyperpipeConfigSGIX; -typedef struct { - char pipeName[80]; /* Should be [GLX_HYPERPIPE_PIPE_NAME_LENGTH_SGIX] */ - int srcXOrigin, srcYOrigin, srcWidth, srcHeight; - int destXOrigin, destYOrigin, destWidth, destHeight; -} GLXPipeRect; -typedef struct { - char pipeName[80]; /* Should be [GLX_HYPERPIPE_PIPE_NAME_LENGTH_SGIX] */ - int XOrigin, YOrigin, maxHeight, maxWidth; -} GLXPipeRectLimits; - - -#define GLX_VERSION_1_0 1 -GLAD_API_CALL int GLAD_GLX_VERSION_1_0; -#define GLX_VERSION_1_1 1 -GLAD_API_CALL int GLAD_GLX_VERSION_1_1; -#define GLX_VERSION_1_2 1 -GLAD_API_CALL int GLAD_GLX_VERSION_1_2; -#define GLX_VERSION_1_3 1 -GLAD_API_CALL int GLAD_GLX_VERSION_1_3; -#define GLX_VERSION_1_4 1 -GLAD_API_CALL int GLAD_GLX_VERSION_1_4; -#define GLX_ARB_create_context 1 -GLAD_API_CALL int GLAD_GLX_ARB_create_context; -#define GLX_ARB_create_context_profile 1 -GLAD_API_CALL int GLAD_GLX_ARB_create_context_profile; -#define GLX_ARB_get_proc_address 1 -GLAD_API_CALL int GLAD_GLX_ARB_get_proc_address; -#define GLX_EXT_swap_control 1 -GLAD_API_CALL int GLAD_GLX_EXT_swap_control; -#define GLX_MESA_swap_control 1 -GLAD_API_CALL int GLAD_GLX_MESA_swap_control; - - -typedef GLXFBConfig * (GLAD_API_PTR *PFNGLXCHOOSEFBCONFIGPROC)(Display * dpy, int screen, const int * attrib_list, int * nelements); -typedef XVisualInfo * (GLAD_API_PTR *PFNGLXCHOOSEVISUALPROC)(Display * dpy, int screen, int * attribList); -typedef void (GLAD_API_PTR *PFNGLXCOPYCONTEXTPROC)(Display * dpy, GLXContext src, GLXContext dst, unsigned long mask); -typedef GLXContext (GLAD_API_PTR *PFNGLXCREATECONTEXTPROC)(Display * dpy, XVisualInfo * vis, GLXContext shareList, Bool direct); -typedef GLXContext (GLAD_API_PTR *PFNGLXCREATECONTEXTATTRIBSARBPROC)(Display * dpy, GLXFBConfig config, GLXContext share_context, Bool direct, const int * attrib_list); -typedef GLXPixmap (GLAD_API_PTR *PFNGLXCREATEGLXPIXMAPPROC)(Display * dpy, XVisualInfo * visual, Pixmap pixmap); -typedef GLXContext (GLAD_API_PTR *PFNGLXCREATENEWCONTEXTPROC)(Display * dpy, GLXFBConfig config, int render_type, GLXContext share_list, Bool direct); -typedef GLXPbuffer (GLAD_API_PTR *PFNGLXCREATEPBUFFERPROC)(Display * dpy, GLXFBConfig config, const int * attrib_list); -typedef GLXPixmap (GLAD_API_PTR *PFNGLXCREATEPIXMAPPROC)(Display * dpy, GLXFBConfig config, Pixmap pixmap, const int * attrib_list); -typedef GLXWindow (GLAD_API_PTR *PFNGLXCREATEWINDOWPROC)(Display * dpy, GLXFBConfig config, Window win, const int * attrib_list); -typedef void (GLAD_API_PTR *PFNGLXDESTROYCONTEXTPROC)(Display * dpy, GLXContext ctx); -typedef void (GLAD_API_PTR *PFNGLXDESTROYGLXPIXMAPPROC)(Display * dpy, GLXPixmap pixmap); -typedef void (GLAD_API_PTR *PFNGLXDESTROYPBUFFERPROC)(Display * dpy, GLXPbuffer pbuf); -typedef void (GLAD_API_PTR *PFNGLXDESTROYPIXMAPPROC)(Display * dpy, GLXPixmap pixmap); -typedef void (GLAD_API_PTR *PFNGLXDESTROYWINDOWPROC)(Display * dpy, GLXWindow win); -typedef const char * (GLAD_API_PTR *PFNGLXGETCLIENTSTRINGPROC)(Display * dpy, int name); -typedef int (GLAD_API_PTR *PFNGLXGETCONFIGPROC)(Display * dpy, XVisualInfo * visual, int attrib, int * value); -typedef GLXContext (GLAD_API_PTR *PFNGLXGETCURRENTCONTEXTPROC)(void); -typedef Display * (GLAD_API_PTR *PFNGLXGETCURRENTDISPLAYPROC)(void); -typedef GLXDrawable (GLAD_API_PTR *PFNGLXGETCURRENTDRAWABLEPROC)(void); -typedef GLXDrawable (GLAD_API_PTR *PFNGLXGETCURRENTREADDRAWABLEPROC)(void); -typedef int (GLAD_API_PTR *PFNGLXGETFBCONFIGATTRIBPROC)(Display * dpy, GLXFBConfig config, int attribute, int * value); -typedef GLXFBConfig * (GLAD_API_PTR *PFNGLXGETFBCONFIGSPROC)(Display * dpy, int screen, int * nelements); -typedef __GLXextFuncPtr (GLAD_API_PTR *PFNGLXGETPROCADDRESSPROC)(const GLubyte * procName); -typedef __GLXextFuncPtr (GLAD_API_PTR *PFNGLXGETPROCADDRESSARBPROC)(const GLubyte * procName); -typedef void (GLAD_API_PTR *PFNGLXGETSELECTEDEVENTPROC)(Display * dpy, GLXDrawable draw, unsigned long * event_mask); -typedef int (GLAD_API_PTR *PFNGLXGETSWAPINTERVALMESAPROC)(void); -typedef XVisualInfo * (GLAD_API_PTR *PFNGLXGETVISUALFROMFBCONFIGPROC)(Display * dpy, GLXFBConfig config); -typedef Bool (GLAD_API_PTR *PFNGLXISDIRECTPROC)(Display * dpy, GLXContext ctx); -typedef Bool (GLAD_API_PTR *PFNGLXMAKECONTEXTCURRENTPROC)(Display * dpy, GLXDrawable draw, GLXDrawable read, GLXContext ctx); -typedef Bool (GLAD_API_PTR *PFNGLXMAKECURRENTPROC)(Display * dpy, GLXDrawable drawable, GLXContext ctx); -typedef int (GLAD_API_PTR *PFNGLXQUERYCONTEXTPROC)(Display * dpy, GLXContext ctx, int attribute, int * value); -typedef void (GLAD_API_PTR *PFNGLXQUERYDRAWABLEPROC)(Display * dpy, GLXDrawable draw, int attribute, unsigned int * value); -typedef Bool (GLAD_API_PTR *PFNGLXQUERYEXTENSIONPROC)(Display * dpy, int * errorb, int * event); -typedef const char * (GLAD_API_PTR *PFNGLXQUERYEXTENSIONSSTRINGPROC)(Display * dpy, int screen); -typedef const char * (GLAD_API_PTR *PFNGLXQUERYSERVERSTRINGPROC)(Display * dpy, int screen, int name); -typedef Bool (GLAD_API_PTR *PFNGLXQUERYVERSIONPROC)(Display * dpy, int * maj, int * min); -typedef void (GLAD_API_PTR *PFNGLXSELECTEVENTPROC)(Display * dpy, GLXDrawable draw, unsigned long event_mask); -typedef void (GLAD_API_PTR *PFNGLXSWAPBUFFERSPROC)(Display * dpy, GLXDrawable drawable); -typedef void (GLAD_API_PTR *PFNGLXSWAPINTERVALEXTPROC)(Display * dpy, GLXDrawable drawable, int interval); -typedef int (GLAD_API_PTR *PFNGLXSWAPINTERVALMESAPROC)(unsigned int interval); -typedef void (GLAD_API_PTR *PFNGLXUSEXFONTPROC)(Font font, int first, int count, int list); -typedef void (GLAD_API_PTR *PFNGLXWAITGLPROC)(void); -typedef void (GLAD_API_PTR *PFNGLXWAITXPROC)(void); - -GLAD_API_CALL PFNGLXCHOOSEFBCONFIGPROC glad_glXChooseFBConfig; -#define glXChooseFBConfig glad_glXChooseFBConfig -GLAD_API_CALL PFNGLXCHOOSEVISUALPROC glad_glXChooseVisual; -#define glXChooseVisual glad_glXChooseVisual -GLAD_API_CALL PFNGLXCOPYCONTEXTPROC glad_glXCopyContext; -#define glXCopyContext glad_glXCopyContext -GLAD_API_CALL PFNGLXCREATECONTEXTPROC glad_glXCreateContext; -#define glXCreateContext glad_glXCreateContext -GLAD_API_CALL PFNGLXCREATECONTEXTATTRIBSARBPROC glad_glXCreateContextAttribsARB; -#define glXCreateContextAttribsARB glad_glXCreateContextAttribsARB -GLAD_API_CALL PFNGLXCREATEGLXPIXMAPPROC glad_glXCreateGLXPixmap; -#define glXCreateGLXPixmap glad_glXCreateGLXPixmap -GLAD_API_CALL PFNGLXCREATENEWCONTEXTPROC glad_glXCreateNewContext; -#define glXCreateNewContext glad_glXCreateNewContext -GLAD_API_CALL PFNGLXCREATEPBUFFERPROC glad_glXCreatePbuffer; -#define glXCreatePbuffer glad_glXCreatePbuffer -GLAD_API_CALL PFNGLXCREATEPIXMAPPROC glad_glXCreatePixmap; -#define glXCreatePixmap glad_glXCreatePixmap -GLAD_API_CALL PFNGLXCREATEWINDOWPROC glad_glXCreateWindow; -#define glXCreateWindow glad_glXCreateWindow -GLAD_API_CALL PFNGLXDESTROYCONTEXTPROC glad_glXDestroyContext; -#define glXDestroyContext glad_glXDestroyContext -GLAD_API_CALL PFNGLXDESTROYGLXPIXMAPPROC glad_glXDestroyGLXPixmap; -#define glXDestroyGLXPixmap glad_glXDestroyGLXPixmap -GLAD_API_CALL PFNGLXDESTROYPBUFFERPROC glad_glXDestroyPbuffer; -#define glXDestroyPbuffer glad_glXDestroyPbuffer -GLAD_API_CALL PFNGLXDESTROYPIXMAPPROC glad_glXDestroyPixmap; -#define glXDestroyPixmap glad_glXDestroyPixmap -GLAD_API_CALL PFNGLXDESTROYWINDOWPROC glad_glXDestroyWindow; -#define glXDestroyWindow glad_glXDestroyWindow -GLAD_API_CALL PFNGLXGETCLIENTSTRINGPROC glad_glXGetClientString; -#define glXGetClientString glad_glXGetClientString -GLAD_API_CALL PFNGLXGETCONFIGPROC glad_glXGetConfig; -#define glXGetConfig glad_glXGetConfig -GLAD_API_CALL PFNGLXGETCURRENTCONTEXTPROC glad_glXGetCurrentContext; -#define glXGetCurrentContext glad_glXGetCurrentContext -GLAD_API_CALL PFNGLXGETCURRENTDISPLAYPROC glad_glXGetCurrentDisplay; -#define glXGetCurrentDisplay glad_glXGetCurrentDisplay -GLAD_API_CALL PFNGLXGETCURRENTDRAWABLEPROC glad_glXGetCurrentDrawable; -#define glXGetCurrentDrawable glad_glXGetCurrentDrawable -GLAD_API_CALL PFNGLXGETCURRENTREADDRAWABLEPROC glad_glXGetCurrentReadDrawable; -#define glXGetCurrentReadDrawable glad_glXGetCurrentReadDrawable -GLAD_API_CALL PFNGLXGETFBCONFIGATTRIBPROC glad_glXGetFBConfigAttrib; -#define glXGetFBConfigAttrib glad_glXGetFBConfigAttrib -GLAD_API_CALL PFNGLXGETFBCONFIGSPROC glad_glXGetFBConfigs; -#define glXGetFBConfigs glad_glXGetFBConfigs -GLAD_API_CALL PFNGLXGETPROCADDRESSPROC glad_glXGetProcAddress; -#define glXGetProcAddress glad_glXGetProcAddress -GLAD_API_CALL PFNGLXGETPROCADDRESSARBPROC glad_glXGetProcAddressARB; -#define glXGetProcAddressARB glad_glXGetProcAddressARB -GLAD_API_CALL PFNGLXGETSELECTEDEVENTPROC glad_glXGetSelectedEvent; -#define glXGetSelectedEvent glad_glXGetSelectedEvent -GLAD_API_CALL PFNGLXGETSWAPINTERVALMESAPROC glad_glXGetSwapIntervalMESA; -#define glXGetSwapIntervalMESA glad_glXGetSwapIntervalMESA -GLAD_API_CALL PFNGLXGETVISUALFROMFBCONFIGPROC glad_glXGetVisualFromFBConfig; -#define glXGetVisualFromFBConfig glad_glXGetVisualFromFBConfig -GLAD_API_CALL PFNGLXISDIRECTPROC glad_glXIsDirect; -#define glXIsDirect glad_glXIsDirect -GLAD_API_CALL PFNGLXMAKECONTEXTCURRENTPROC glad_glXMakeContextCurrent; -#define glXMakeContextCurrent glad_glXMakeContextCurrent -GLAD_API_CALL PFNGLXMAKECURRENTPROC glad_glXMakeCurrent; -#define glXMakeCurrent glad_glXMakeCurrent -GLAD_API_CALL PFNGLXQUERYCONTEXTPROC glad_glXQueryContext; -#define glXQueryContext glad_glXQueryContext -GLAD_API_CALL PFNGLXQUERYDRAWABLEPROC glad_glXQueryDrawable; -#define glXQueryDrawable glad_glXQueryDrawable -GLAD_API_CALL PFNGLXQUERYEXTENSIONPROC glad_glXQueryExtension; -#define glXQueryExtension glad_glXQueryExtension -GLAD_API_CALL PFNGLXQUERYEXTENSIONSSTRINGPROC glad_glXQueryExtensionsString; -#define glXQueryExtensionsString glad_glXQueryExtensionsString -GLAD_API_CALL PFNGLXQUERYSERVERSTRINGPROC glad_glXQueryServerString; -#define glXQueryServerString glad_glXQueryServerString -GLAD_API_CALL PFNGLXQUERYVERSIONPROC glad_glXQueryVersion; -#define glXQueryVersion glad_glXQueryVersion -GLAD_API_CALL PFNGLXSELECTEVENTPROC glad_glXSelectEvent; -#define glXSelectEvent glad_glXSelectEvent -GLAD_API_CALL PFNGLXSWAPBUFFERSPROC glad_glXSwapBuffers; -#define glXSwapBuffers glad_glXSwapBuffers -GLAD_API_CALL PFNGLXSWAPINTERVALEXTPROC glad_glXSwapIntervalEXT; -#define glXSwapIntervalEXT glad_glXSwapIntervalEXT -GLAD_API_CALL PFNGLXSWAPINTERVALMESAPROC glad_glXSwapIntervalMESA; -#define glXSwapIntervalMESA glad_glXSwapIntervalMESA -GLAD_API_CALL PFNGLXUSEXFONTPROC glad_glXUseXFont; -#define glXUseXFont glad_glXUseXFont -GLAD_API_CALL PFNGLXWAITGLPROC glad_glXWaitGL; -#define glXWaitGL glad_glXWaitGL -GLAD_API_CALL PFNGLXWAITXPROC glad_glXWaitX; -#define glXWaitX glad_glXWaitX - - - - - -GLAD_API_CALL int gladLoadGLXUserPtr(Display *display, int screen, GLADuserptrloadfunc load, void *userptr); -GLAD_API_CALL int gladLoadGLX(Display *display, int screen, GLADloadfunc load); - -#ifdef GLAD_GLX - -GLAD_API_CALL int gladLoaderLoadGLX(Display *display, int screen); - -GLAD_API_CALL void gladLoaderUnloadGLX(void); - -#endif -#ifdef __cplusplus -} -#endif -#endif diff --git a/core/deps/glad/src/glx.c b/core/deps/glad/src/glx.c deleted file mode 100644 index 4c9567707..000000000 --- a/core/deps/glad/src/glx.c +++ /dev/null @@ -1,387 +0,0 @@ -/** - * SPDX-License-Identifier: (WTFPL OR CC0-1.0) AND Apache-2.0 - */ -#include -#include -#include -#include - -#ifndef GLAD_IMPL_UTIL_C_ -#define GLAD_IMPL_UTIL_C_ - -#ifdef _MSC_VER -#define GLAD_IMPL_UTIL_SSCANF sscanf_s -#else -#define GLAD_IMPL_UTIL_SSCANF sscanf -#endif - -#endif /* GLAD_IMPL_UTIL_C_ */ - -#ifdef __cplusplus -extern "C" { -#endif - - - -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; -int GLAD_GLX_ARB_create_context = 0; -int GLAD_GLX_ARB_create_context_profile = 0; -int GLAD_GLX_ARB_get_proc_address = 0; -int GLAD_GLX_EXT_swap_control = 0; -int GLAD_GLX_MESA_swap_control = 0; - - - -PFNGLXCHOOSEFBCONFIGPROC glad_glXChooseFBConfig = NULL; -PFNGLXCHOOSEVISUALPROC glad_glXChooseVisual = NULL; -PFNGLXCOPYCONTEXTPROC glad_glXCopyContext = NULL; -PFNGLXCREATECONTEXTPROC glad_glXCreateContext = NULL; -PFNGLXCREATECONTEXTATTRIBSARBPROC glad_glXCreateContextAttribsARB = 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; -PFNGLXGETPROCADDRESSARBPROC glad_glXGetProcAddressARB = NULL; -PFNGLXGETSELECTEDEVENTPROC glad_glXGetSelectedEvent = NULL; -PFNGLXGETSWAPINTERVALMESAPROC glad_glXGetSwapIntervalMESA = 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; -PFNGLXSWAPINTERVALEXTPROC glad_glXSwapIntervalEXT = NULL; -PFNGLXSWAPINTERVALMESAPROC glad_glXSwapIntervalMESA = NULL; -PFNGLXUSEXFONTPROC glad_glXUseXFont = NULL; -PFNGLXWAITGLPROC glad_glXWaitGL = NULL; -PFNGLXWAITXPROC glad_glXWaitX = NULL; - - -static void glad_glx_load_GLX_VERSION_1_0( GLADuserptrloadfunc load, void* userptr) { - if(!GLAD_GLX_VERSION_1_0) return; - glad_glXChooseVisual = (PFNGLXCHOOSEVISUALPROC) load(userptr, "glXChooseVisual"); - glad_glXCopyContext = (PFNGLXCOPYCONTEXTPROC) load(userptr, "glXCopyContext"); - glad_glXCreateContext = (PFNGLXCREATECONTEXTPROC) load(userptr, "glXCreateContext"); - glad_glXCreateGLXPixmap = (PFNGLXCREATEGLXPIXMAPPROC) load(userptr, "glXCreateGLXPixmap"); - glad_glXDestroyContext = (PFNGLXDESTROYCONTEXTPROC) load(userptr, "glXDestroyContext"); - glad_glXDestroyGLXPixmap = (PFNGLXDESTROYGLXPIXMAPPROC) load(userptr, "glXDestroyGLXPixmap"); - glad_glXGetConfig = (PFNGLXGETCONFIGPROC) load(userptr, "glXGetConfig"); - glad_glXGetCurrentContext = (PFNGLXGETCURRENTCONTEXTPROC) load(userptr, "glXGetCurrentContext"); - glad_glXGetCurrentDrawable = (PFNGLXGETCURRENTDRAWABLEPROC) load(userptr, "glXGetCurrentDrawable"); - glad_glXIsDirect = (PFNGLXISDIRECTPROC) load(userptr, "glXIsDirect"); - glad_glXMakeCurrent = (PFNGLXMAKECURRENTPROC) load(userptr, "glXMakeCurrent"); - glad_glXQueryExtension = (PFNGLXQUERYEXTENSIONPROC) load(userptr, "glXQueryExtension"); - glad_glXQueryVersion = (PFNGLXQUERYVERSIONPROC) load(userptr, "glXQueryVersion"); - glad_glXSwapBuffers = (PFNGLXSWAPBUFFERSPROC) load(userptr, "glXSwapBuffers"); - glad_glXUseXFont = (PFNGLXUSEXFONTPROC) load(userptr, "glXUseXFont"); - glad_glXWaitGL = (PFNGLXWAITGLPROC) load(userptr, "glXWaitGL"); - glad_glXWaitX = (PFNGLXWAITXPROC) load(userptr, "glXWaitX"); -} -static void glad_glx_load_GLX_VERSION_1_1( GLADuserptrloadfunc load, void* userptr) { - if(!GLAD_GLX_VERSION_1_1) return; - glad_glXGetClientString = (PFNGLXGETCLIENTSTRINGPROC) load(userptr, "glXGetClientString"); - glad_glXQueryExtensionsString = (PFNGLXQUERYEXTENSIONSSTRINGPROC) load(userptr, "glXQueryExtensionsString"); - glad_glXQueryServerString = (PFNGLXQUERYSERVERSTRINGPROC) load(userptr, "glXQueryServerString"); -} -static void glad_glx_load_GLX_VERSION_1_2( GLADuserptrloadfunc load, void* userptr) { - if(!GLAD_GLX_VERSION_1_2) return; - glad_glXGetCurrentDisplay = (PFNGLXGETCURRENTDISPLAYPROC) load(userptr, "glXGetCurrentDisplay"); -} -static void glad_glx_load_GLX_VERSION_1_3( GLADuserptrloadfunc load, void* userptr) { - if(!GLAD_GLX_VERSION_1_3) return; - glad_glXChooseFBConfig = (PFNGLXCHOOSEFBCONFIGPROC) load(userptr, "glXChooseFBConfig"); - glad_glXCreateNewContext = (PFNGLXCREATENEWCONTEXTPROC) load(userptr, "glXCreateNewContext"); - glad_glXCreatePbuffer = (PFNGLXCREATEPBUFFERPROC) load(userptr, "glXCreatePbuffer"); - glad_glXCreatePixmap = (PFNGLXCREATEPIXMAPPROC) load(userptr, "glXCreatePixmap"); - glad_glXCreateWindow = (PFNGLXCREATEWINDOWPROC) load(userptr, "glXCreateWindow"); - glad_glXDestroyPbuffer = (PFNGLXDESTROYPBUFFERPROC) load(userptr, "glXDestroyPbuffer"); - glad_glXDestroyPixmap = (PFNGLXDESTROYPIXMAPPROC) load(userptr, "glXDestroyPixmap"); - glad_glXDestroyWindow = (PFNGLXDESTROYWINDOWPROC) load(userptr, "glXDestroyWindow"); - glad_glXGetCurrentReadDrawable = (PFNGLXGETCURRENTREADDRAWABLEPROC) load(userptr, "glXGetCurrentReadDrawable"); - glad_glXGetFBConfigAttrib = (PFNGLXGETFBCONFIGATTRIBPROC) load(userptr, "glXGetFBConfigAttrib"); - glad_glXGetFBConfigs = (PFNGLXGETFBCONFIGSPROC) load(userptr, "glXGetFBConfigs"); - glad_glXGetSelectedEvent = (PFNGLXGETSELECTEDEVENTPROC) load(userptr, "glXGetSelectedEvent"); - glad_glXGetVisualFromFBConfig = (PFNGLXGETVISUALFROMFBCONFIGPROC) load(userptr, "glXGetVisualFromFBConfig"); - glad_glXMakeContextCurrent = (PFNGLXMAKECONTEXTCURRENTPROC) load(userptr, "glXMakeContextCurrent"); - glad_glXQueryContext = (PFNGLXQUERYCONTEXTPROC) load(userptr, "glXQueryContext"); - glad_glXQueryDrawable = (PFNGLXQUERYDRAWABLEPROC) load(userptr, "glXQueryDrawable"); - glad_glXSelectEvent = (PFNGLXSELECTEVENTPROC) load(userptr, "glXSelectEvent"); -} -static void glad_glx_load_GLX_VERSION_1_4( GLADuserptrloadfunc load, void* userptr) { - if(!GLAD_GLX_VERSION_1_4) return; - glad_glXGetProcAddress = (PFNGLXGETPROCADDRESSPROC) load(userptr, "glXGetProcAddress"); -} -static void glad_glx_load_GLX_ARB_create_context( GLADuserptrloadfunc load, void* userptr) { - if(!GLAD_GLX_ARB_create_context) return; - glad_glXCreateContextAttribsARB = (PFNGLXCREATECONTEXTATTRIBSARBPROC) load(userptr, "glXCreateContextAttribsARB"); -} -static void glad_glx_load_GLX_ARB_get_proc_address( GLADuserptrloadfunc load, void* userptr) { - if(!GLAD_GLX_ARB_get_proc_address) return; - glad_glXGetProcAddressARB = (PFNGLXGETPROCADDRESSARBPROC) load(userptr, "glXGetProcAddressARB"); -} -static void glad_glx_load_GLX_EXT_swap_control( GLADuserptrloadfunc load, void* userptr) { - if(!GLAD_GLX_EXT_swap_control) return; - glad_glXSwapIntervalEXT = (PFNGLXSWAPINTERVALEXTPROC) load(userptr, "glXSwapIntervalEXT"); -} -static void glad_glx_load_GLX_MESA_swap_control( GLADuserptrloadfunc load, void* userptr) { - if(!GLAD_GLX_MESA_swap_control) return; - glad_glXGetSwapIntervalMESA = (PFNGLXGETSWAPINTERVALMESAPROC) load(userptr, "glXGetSwapIntervalMESA"); - glad_glXSwapIntervalMESA = (PFNGLXSWAPINTERVALMESAPROC) load(userptr, "glXSwapIntervalMESA"); -} - - - -static int glad_glx_has_extension(Display *display, int screen, const char *ext) { -#ifndef GLX_VERSION_1_1 - GLAD_UNUSED(display); - GLAD_UNUSED(screen); - GLAD_UNUSED(ext); -#else - const char *terminator; - const char *loc; - const char *extensions; - - if (glXQueryExtensionsString == NULL) { - return 0; - } - - extensions = glXQueryExtensionsString(display, screen); - - 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; - } -#endif - - return 0; -} - -static GLADapiproc glad_glx_get_proc_from_userptr(void *userptr, const char* name) { - return (GLAD_GNUC_EXTENSION (GLADapiproc (*)(const char *name)) userptr)(name); -} - -static int glad_glx_find_extensions(Display *display, int screen) { - GLAD_GLX_ARB_create_context = glad_glx_has_extension(display, screen, "GLX_ARB_create_context"); - GLAD_GLX_ARB_create_context_profile = glad_glx_has_extension(display, screen, "GLX_ARB_create_context_profile"); - GLAD_GLX_ARB_get_proc_address = glad_glx_has_extension(display, screen, "GLX_ARB_get_proc_address"); - GLAD_GLX_EXT_swap_control = glad_glx_has_extension(display, screen, "GLX_EXT_swap_control"); - GLAD_GLX_MESA_swap_control = glad_glx_has_extension(display, screen, "GLX_MESA_swap_control"); - return 1; -} - -static int glad_glx_find_core_glx(Display **display, int *screen) { - int major = 0, minor = 0; - if(*display == NULL) { -#ifdef GLAD_GLX_NO_X11 - GLAD_UNUSED(screen); - return 0; -#else - *display = XOpenDisplay(0); - if (*display == NULL) { - return 0; - } - *screen = XScreenNumberOfScreen(XDefaultScreenOfDisplay(*display)); -#endif - } - glXQueryVersion(*display, &major, &minor); - 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; - return GLAD_MAKE_VERSION(major, minor); -} - -int gladLoadGLXUserPtr(Display *display, int screen, GLADuserptrloadfunc load, void *userptr) { - int version; - glXQueryVersion = (PFNGLXQUERYVERSIONPROC) load(userptr, "glXQueryVersion"); - if(glXQueryVersion == NULL) return 0; - version = glad_glx_find_core_glx(&display, &screen); - - glad_glx_load_GLX_VERSION_1_0(load, userptr); - glad_glx_load_GLX_VERSION_1_1(load, userptr); - glad_glx_load_GLX_VERSION_1_2(load, userptr); - glad_glx_load_GLX_VERSION_1_3(load, userptr); - glad_glx_load_GLX_VERSION_1_4(load, userptr); - - if (!glad_glx_find_extensions(display, screen)) return 0; - glad_glx_load_GLX_ARB_create_context(load, userptr); - glad_glx_load_GLX_ARB_get_proc_address(load, userptr); - glad_glx_load_GLX_EXT_swap_control(load, userptr); - glad_glx_load_GLX_MESA_swap_control(load, userptr); - - - return version; -} - -int gladLoadGLX(Display *display, int screen, GLADloadfunc load) { - return gladLoadGLXUserPtr(display, screen, glad_glx_get_proc_from_userptr, GLAD_GNUC_EXTENSION (void*) load); -} - - - -#ifdef GLAD_GLX - -#ifndef GLAD_LOADER_LIBRARY_C_ -#define GLAD_LOADER_LIBRARY_C_ - -#include -#include - -#if GLAD_PLATFORM_WIN32 -#include -#else -#include -#endif - - -static void* glad_get_dlopen_handle(const char *lib_names[], int length) { - void *handle = NULL; - int i; - - for (i = 0; i < length; ++i) { -#if GLAD_PLATFORM_WIN32 - #if GLAD_PLATFORM_UWP - size_t buffer_size = (strlen(lib_names[i]) + 1) * sizeof(WCHAR); - LPWSTR buffer = (LPWSTR) malloc(buffer_size); - if (buffer != NULL) { - int ret = MultiByteToWideChar(CP_ACP, 0, lib_names[i], -1, buffer, buffer_size); - if (ret != 0) { - handle = (void*) LoadPackagedLibrary(buffer, 0); - } - free((void*) buffer); - } - #else - handle = (void*) LoadLibraryA(lib_names[i]); - #endif -#else - handle = dlopen(lib_names[i], RTLD_LAZY | RTLD_LOCAL); -#endif - if (handle != NULL) { - return handle; - } - } - - return NULL; -} - -static void glad_close_dlopen_handle(void* handle) { - if (handle != NULL) { -#if GLAD_PLATFORM_WIN32 - FreeLibrary((HMODULE) handle); -#else - dlclose(handle); -#endif - } -} - -static GLADapiproc glad_dlsym_handle(void* handle, const char *name) { - if (handle == NULL) { - return NULL; - } - -#if GLAD_PLATFORM_WIN32 - return (GLADapiproc) GetProcAddress((HMODULE) handle, name); -#else - return GLAD_GNUC_EXTENSION (GLADapiproc) dlsym(handle, name); -#endif -} - -#endif /* GLAD_LOADER_LIBRARY_C_ */ - -typedef void* (GLAD_API_PTR *GLADglxprocaddrfunc)(const char*); - -static GLADapiproc glad_glx_get_proc(void *userptr, const char *name) { - return GLAD_GNUC_EXTENSION ((GLADapiproc (*)(const char *name)) userptr)(name); -} - -static void* _glx_handle; - -static void* glad_glx_dlopen_handle(void) { - static const char *NAMES[] = { -#if defined __CYGWIN__ - "libGL-1.so", -#endif - "libGL.so.1", - "libGL.so" - }; - - if (_glx_handle == NULL) { - _glx_handle = glad_get_dlopen_handle(NAMES, sizeof(NAMES) / sizeof(NAMES[0])); - } - - return _glx_handle; -} - -int gladLoaderLoadGLX(Display *display, int screen) { - int version = 0; - void *handle = NULL; - int did_load = 0; - GLADglxprocaddrfunc loader; - - did_load = _glx_handle == NULL; - handle = glad_glx_dlopen_handle(); - if (handle != NULL) { - loader = (GLADglxprocaddrfunc) glad_dlsym_handle(handle, "glXGetProcAddressARB"); - if (loader != NULL) { - version = gladLoadGLXUserPtr(display, screen, glad_glx_get_proc, GLAD_GNUC_EXTENSION (void*) loader); - } - - if (!version && did_load) { - gladLoaderUnloadGLX(); - } - } - - return version; -} - - -void gladLoaderUnloadGLX() { - if (_glx_handle != NULL) { - glad_close_dlopen_handle(_glx_handle); - _glx_handle = NULL; - } -} - -#endif /* GLAD_GLX */ - -#ifdef __cplusplus -} -#endif diff --git a/core/linux-dist/x11.cpp b/core/linux-dist/x11.cpp index 49f317e2d..f80c1febb 100644 --- a/core/linux-dist/x11.cpp +++ b/core/linux-dist/x11.cpp @@ -278,16 +278,8 @@ void x11_window_create() int depth = CopyFromParent; - XVisualInfo* x11Visual = nullptr; - Colormap x11Colormap = 0; -#if !defined(GLES) - - if (!theGLContext.ChooseVisual(x11_disp, &x11Visual, &depth)) - exit(1); - x11Colormap = XCreateColormap(x11_disp, RootWindow(x11_disp, x11Screen), x11Visual->visual, AllocNone); -#else int i32Depth = DefaultDepth(x11_disp, x11Screen); - x11Visual = new XVisualInfo; + XVisualInfo* x11Visual = new XVisualInfo; if (!XMatchVisualInfo(x11_disp, x11Screen, i32Depth, TrueColor, x11Visual)) { ERROR_LOG(RENDERER, "Error: Unable to acquire visual"); @@ -296,8 +288,8 @@ void x11_window_create() } // Gets the window parameters Window sRootWindow = RootWindow(x11_disp, x11Screen); - x11Colormap = XCreateColormap(x11_disp, sRootWindow, x11Visual->visual, AllocNone); -#endif + Colormap x11Colormap = XCreateColormap(x11_disp, sRootWindow, x11Visual->visual, AllocNone); + XSetWindowAttributes sWA; sWA.colormap = x11Colormap; @@ -326,11 +318,8 @@ void x11_window_create() // Creates the X11 window x11_win = XCreateWindow(x11_disp, RootWindow(x11_disp, x11Screen), 0, 0, x11_width, x11_height, 0, depth, InputOutput, x11Visual->visual, ui32Mask, &sWA); -#if !defined(GLES) - XFree(x11Visual); -#else + delete x11Visual; -#endif XSetWindowBackground(x11_disp, x11_win, 0); diff --git a/core/wsi/egl.cpp b/core/wsi/egl.cpp index d55993381..0ee2672a1 100644 --- a/core/wsi/egl.cpp +++ b/core/wsi/egl.cpp @@ -108,8 +108,8 @@ bool EGLGraphicsContext::init() } if (try_full_gl) { - EGLint contextAttrs[] = { EGL_CONTEXT_MAJOR_VERSION_KHR, 3, - EGL_CONTEXT_OPENGL_PROFILE_MASK_KHR, EGL_CONTEXT_OPENGL_COMPATIBILITY_PROFILE_BIT_KHR, + EGLint contextAttrs[] = { EGL_CONTEXT_MAJOR_VERSION, 3, + EGL_CONTEXT_OPENGL_PROFILE_MASK, EGL_CONTEXT_OPENGL_COMPATIBILITY_PROFILE_BIT, EGL_NONE }; context = eglCreateContext(display, config, EGL_NO_CONTEXT, contextAttrs); if (context != EGL_NO_CONTEXT) diff --git a/core/wsi/gl_context.h b/core/wsi/gl_context.h index a3f085a6c..1858322ef 100644 --- a/core/wsi/gl_context.h +++ b/core/wsi/gl_context.h @@ -88,14 +88,10 @@ private: #include "sdl.h" -#elif defined(GLES) || defined(__ANDROID__) || defined(__SWITCH__) +#elif defined(__ANDROID__) || defined(SUPPORT_DISPMANX) || defined(SUPPORT_X11) #include "egl.h" -#elif defined(SUPPORT_X11) - -#include "xgl.h" - #else #error Unsupported window system diff --git a/core/wsi/xgl.cpp b/core/wsi/xgl.cpp deleted file mode 100644 index 271a87209..000000000 --- a/core/wsi/xgl.cpp +++ /dev/null @@ -1,172 +0,0 @@ -/* - Created on: Oct 18, 2019 - - Copyright 2019 flyinghead - - This file is part of Flycast. - - Flycast is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 2 of the License, or - (at your option) any later version. - - Flycast is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with Flycast. If not, see . -*/ -#if defined(SUPPORT_X11) && !defined(USE_SDL) && !defined(LIBRETRO) -#include "cfg/option.h" -#include "types.h" -#include "xgl.h" - -XGLGraphicsContext theGLContext; - -static int x11_error_handler(Display *, XErrorEvent *) -{ - return 0; -} - -bool XGLGraphicsContext::init() -{ - instance = this; - int context_attribs[] = - { - GLX_CONTEXT_MAJOR_VERSION_ARB, 4, - GLX_CONTEXT_MINOR_VERSION_ARB, 3, -#ifndef NDEBUG - GLX_CONTEXT_FLAGS_ARB, GLX_CONTEXT_DEBUG_BIT_ARB, -#endif - GLX_CONTEXT_PROFILE_MASK_ARB, GLX_CONTEXT_CORE_PROFILE_BIT_ARB, - None - }; - int (*old_handler)(Display *, XErrorEvent *) = XSetErrorHandler(&x11_error_handler); - - context = glXCreateContextAttribsARB((Display *)display, *framebufferConfigs, 0, True, context_attribs); - if (!context) - { - INFO_LOG(RENDERER, "OpenGL 4.3 not supported"); - // Try GL 3.0 - context_attribs[1] = 3; - context_attribs[3] = 0; - context = glXCreateContextAttribsARB((Display *)display, *framebufferConfigs, 0, True, context_attribs); - if (!context) - { - ERROR_LOG(RENDERER, "OpenGL 3.0 not supported"); - return false; - } - } - XSetErrorHandler(old_handler); - XSync((Display *)display, False); - - glXMakeCurrent((Display *)display, (GLXDrawable)window, context); - - if (!gladLoadGL((GLADloadfunc) glXGetProcAddressARB)) - return false; - - if (!GLAD_GL_VERSION_3_1) - return false; - - Window win; - int temp; - unsigned int tempu; - XGetGeometry((Display *)display, (GLXDrawable)window, &win, &temp, &temp, (u32 *)&settings.display.width, (u32 *)&settings.display.height, &tempu, &tempu); - - swapOnVSync = config::VSync; - if (glXSwapIntervalMESA != nullptr) - glXSwapIntervalMESA((unsigned)swapOnVSync); - else - { - if (glXSwapIntervalEXT != nullptr) - glXSwapIntervalEXT((Display *)display, (GLXDrawable)window, (int)swapOnVSync); - } - - postInit(); - - return true; -} - -bool XGLGraphicsContext::ChooseVisual(Display* x11Display, XVisualInfo** visual, int* depth) -{ - const long x11Screen = XDefaultScreen(x11Display); - - gladLoaderLoadGLX(x11Display, x11Screen); - - // Get a matching FB config - static int visual_attribs[] = - { - GLX_X_RENDERABLE , True, - GLX_DRAWABLE_TYPE , GLX_WINDOW_BIT, - GLX_RENDER_TYPE , GLX_RGBA_BIT, - GLX_X_VISUAL_TYPE , GLX_TRUE_COLOR, - GLX_RED_SIZE , 8, - GLX_GREEN_SIZE , 8, - GLX_BLUE_SIZE , 8, - GLX_ALPHA_SIZE , 8, - GLX_DOUBLEBUFFER , True, - None - }; - - int glx_major, glx_minor; - - // FBConfigs were added in GLX version 1.3. - if (!glXQueryVersion(x11Display, &glx_major, &glx_minor) || - ((glx_major == 1) && (glx_minor < 3)) || (glx_major < 1)) - { - ERROR_LOG(RENDERER, "Invalid GLX version"); - return false; - } - - int fbcount; - framebufferConfigs = glXChooseFBConfig(x11Display, x11Screen, visual_attribs, &fbcount); - if (framebufferConfigs == nullptr) - { - ERROR_LOG(RENDERER, "Failed to retrieve a framebuffer config"); - return false; - } - INFO_LOG(RENDERER, "Found %d matching FB configs.", fbcount); - - // Get a visual - XVisualInfo *vi = glXGetVisualFromFBConfig(x11Display, *framebufferConfigs); - INFO_LOG(RENDERER, "Chosen visual ID = 0x%lx", vi->visualid); - - *depth = vi->depth; - *visual = vi; - - return true; -} - -void XGLGraphicsContext::swap() -{ - do_swap_automation(); - if (swapOnVSync == (settings.input.fastForwardMode || !config::VSync)) - { - swapOnVSync = (!settings.input.fastForwardMode && config::VSync); - if (glXSwapIntervalMESA != nullptr) - glXSwapIntervalMESA((unsigned)swapOnVSync); - else if (glXSwapIntervalEXT != nullptr) - glXSwapIntervalEXT((Display *)display, (GLXDrawable)window, (int)swapOnVSync); - } - glXSwapBuffers((Display *)display, (GLXDrawable)window); - - Window win; - int temp; - unsigned int tempu; - XGetGeometry((Display *)display, (GLXDrawable)window, &win, &temp, &temp, (u32 *)&settings.display.width, (u32 *)&settings.display.height, &tempu, &tempu); -} - -void XGLGraphicsContext::term() -{ - preTerm(); - if (context) - { - glXMakeCurrent((Display *)display, None, NULL); - glXDestroyContext((Display *)display, context); - context = (GLXContext)0; - } -} - -#endif diff --git a/core/wsi/xgl.h b/core/wsi/xgl.h deleted file mode 100644 index 101a039ad..000000000 --- a/core/wsi/xgl.h +++ /dev/null @@ -1,41 +0,0 @@ -/* - Created on: Oct 18, 2019 - - Copyright 2019 flyinghead - - This file is part of Flycast. - - Flycast is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 2 of the License, or - (at your option) any later version. - - Flycast is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with Flycast. If not, see . -*/ -#pragma once -#include "gl_context.h" -#include - -class XGLGraphicsContext : public GLGraphicsContext -{ -public: - ~XGLGraphicsContext() override { term(); XFree(framebufferConfigs); } - - bool init(); - void term() override; - void swap(); - bool ChooseVisual(Display* x11Display, XVisualInfo** visual, int* depth); - -private: - GLXContext context; - GLXFBConfig* framebufferConfigs = nullptr; - bool swapOnVSync = false; -}; - -extern XGLGraphicsContext theGLContext;