Merge pull request #129 from nwnk/glvnd-awareness

dispatch: Learn about glvnd
macos/v1.5.9
Emmanuele Bassi 7 years ago committed by GitHub
commit b157a4d5ca
  1. 31
      src/dispatch_common.c

@ -178,6 +178,7 @@
#elif defined(ANDROID)
#define GLX_LIB "libGLESv2.so"
#else
#define GLVND_GLX_LIB "libGLX.so.1"
#define GLX_LIB "libGL.so.1"
#endif
@ -193,6 +194,7 @@
#define EGL_LIB "libEGL.so.1"
#define GLES1_LIB "libGLESv1_CM.so.1"
#define GLES2_LIB "libGLESv2.so.2"
#define OPENGL_LIB "libOpenGL.so.1"
#endif
#ifdef __GNUC__
@ -223,13 +225,18 @@ struct api {
pthread_mutex_t mutex;
#endif
/* dlopen() return value for libGL.so.1. */
/*
* dlopen() return value for the GLX API. This is libGLX.so.1 if the
* runtime is glvnd-enabled, else libGL.so.1
*/
void *glx_handle;
/*
* dlopen() return value for OS X's GL library.
* dlopen() return value for the desktop GL library.
*
* On linux, glx_handle is used instead.
* On Windows this is OPENGL32. On OSX this is classic libGL. On Linux
* this is either libOpenGL (if the runtime is glvnd-enabled) or
* classic libGL.so.1
*/
void *gl_handle;
@ -590,6 +597,10 @@ epoxy_egl_dlsym(const char *name)
void *
epoxy_conservative_glx_dlsym(const char *name, bool exit_if_fails)
{
/* prefer the glvnd library if it exists */
if (!api.glx_handle)
get_dlopen_handle(&api.glx_handle, GLVND_GLX_LIB, false);
return do_dlsym(&api.glx_handle, GLX_LIB, name, exit_if_fails);
}
@ -609,8 +620,18 @@ epoxy_gl_dlsym(const char *name)
"/System/Library/Frameworks/OpenGL.framework/Versions/Current/OpenGL",
name, true);
#else
/* There's no library for desktop GL support independent of GLX. */
return epoxy_glx_dlsym(name);
void *sym;
if (!api.gl_handle)
get_dlopen_handle(&api.gl_handle, OPENGL_LIB, false);
if (api.gl_handle)
return do_dlsym(&api.gl_handle, NULL, name, true);
sym = do_dlsym(&api.glx_handle, GLX_LIB, name, true);
api.gl_handle = api.glx_handle; /* skip the dlopen next time */
return sym;
#endif
}

Loading…
Cancel
Save