|
|
@ -104,10 +104,22 @@ |
|
|
|
|
|
|
|
|
|
|
|
#ifdef __APPLE__ |
|
|
|
#ifdef __APPLE__ |
|
|
|
#define GLX_LIB "/opt/X11/lib/libGL.1.dylib" |
|
|
|
#define GLX_LIB "/opt/X11/lib/libGL.1.dylib" |
|
|
|
|
|
|
|
#elif defined(ANDROID) |
|
|
|
|
|
|
|
#define GLX_LIB "libGLESv2.so" |
|
|
|
#else |
|
|
|
#else |
|
|
|
#define GLX_LIB "libGL.so.1" |
|
|
|
#define GLX_LIB "libGL.so.1" |
|
|
|
#endif |
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#ifdef ANDROID |
|
|
|
|
|
|
|
#define EGL_LIB "libEGL.so" |
|
|
|
|
|
|
|
#define GLES1_LIB "libGLESv1_CM.so" |
|
|
|
|
|
|
|
#define GLES2_LIB "libGLESv2.so" |
|
|
|
|
|
|
|
#else |
|
|
|
|
|
|
|
#define EGL_LIB "libEGL.so.1" |
|
|
|
|
|
|
|
#define GLES1_LIB "libGLESv1_CM.so.1" |
|
|
|
|
|
|
|
#define GLES2_LIB "libGLESv2.so.2" |
|
|
|
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
|
|
struct api { |
|
|
|
struct api { |
|
|
|
#ifndef _WIN32 |
|
|
|
#ifndef _WIN32 |
|
|
|
/**
|
|
|
|
/**
|
|
|
@ -380,7 +392,7 @@ epoxy_current_context_is_glx(void) |
|
|
|
return true; |
|
|
|
return true; |
|
|
|
|
|
|
|
|
|
|
|
#if PLATFORM_HAS_EGL |
|
|
|
#if PLATFORM_HAS_EGL |
|
|
|
sym = do_dlsym(&api.egl_handle, "libEGL.so.1", "eglGetCurrentContext", |
|
|
|
sym = do_dlsym(&api.egl_handle, EGL_LIB, "eglGetCurrentContext", |
|
|
|
false); |
|
|
|
false); |
|
|
|
if (sym && epoxy_egl_get_current_gl_context_api() != EGL_NONE) |
|
|
|
if (sym && epoxy_egl_get_current_gl_context_api() != EGL_NONE) |
|
|
|
return false; |
|
|
|
return false; |
|
|
@ -416,7 +428,7 @@ epoxy_conservative_has_gl_extension(const char *ext) |
|
|
|
void * |
|
|
|
void * |
|
|
|
epoxy_egl_dlsym(const char *name) |
|
|
|
epoxy_egl_dlsym(const char *name) |
|
|
|
{ |
|
|
|
{ |
|
|
|
return do_dlsym(&api.egl_handle, "libEGL.so.1", name, true); |
|
|
|
return do_dlsym(&api.egl_handle, EGL_LIB, name, true); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
void * |
|
|
|
void * |
|
|
@ -446,7 +458,7 @@ epoxy_gles1_dlsym(const char *name) |
|
|
|
if (epoxy_current_context_is_glx()) { |
|
|
|
if (epoxy_current_context_is_glx()) { |
|
|
|
return epoxy_get_proc_address(name); |
|
|
|
return epoxy_get_proc_address(name); |
|
|
|
} else { |
|
|
|
} else { |
|
|
|
return do_dlsym(&api.gles1_handle, "libGLESv1_CM.so.1", name, true); |
|
|
|
return do_dlsym(&api.gles1_handle, GLES1_LIB, name, true); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
@ -456,7 +468,7 @@ epoxy_gles2_dlsym(const char *name) |
|
|
|
if (epoxy_current_context_is_glx()) { |
|
|
|
if (epoxy_current_context_is_glx()) { |
|
|
|
return epoxy_get_proc_address(name); |
|
|
|
return epoxy_get_proc_address(name); |
|
|
|
} else { |
|
|
|
} else { |
|
|
|
return do_dlsym(&api.gles2_handle, "libGLESv2.so.2", name, true); |
|
|
|
return do_dlsym(&api.gles2_handle, GLES2_LIB, name, true); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
@ -476,7 +488,7 @@ epoxy_gles3_dlsym(const char *name) |
|
|
|
if (epoxy_current_context_is_glx()) { |
|
|
|
if (epoxy_current_context_is_glx()) { |
|
|
|
return epoxy_get_proc_address(name); |
|
|
|
return epoxy_get_proc_address(name); |
|
|
|
} else { |
|
|
|
} else { |
|
|
|
void *func = do_dlsym(&api.gles2_handle, "libGLESv2.so.2", name, false); |
|
|
|
void *func = do_dlsym(&api.gles2_handle, GLES2_LIB, name, false); |
|
|
|
|
|
|
|
|
|
|
|
if (func) |
|
|
|
if (func) |
|
|
|
return func; |
|
|
|
return func; |
|
|
@ -494,6 +506,12 @@ epoxy_get_core_proc_address(const char *name, int core_version) |
|
|
|
{ |
|
|
|
{ |
|
|
|
#ifdef _WIN32 |
|
|
|
#ifdef _WIN32 |
|
|
|
int core_symbol_support = 10; |
|
|
|
int core_symbol_support = 10; |
|
|
|
|
|
|
|
#elif defined(ANDROID) |
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
|
|
* All symbols must be resolved through eglGetProcAddress |
|
|
|
|
|
|
|
* on Android |
|
|
|
|
|
|
|
*/ |
|
|
|
|
|
|
|
int core_symbol_support = 0; |
|
|
|
#else |
|
|
|
#else |
|
|
|
int core_symbol_support = 12; |
|
|
|
int core_symbol_support = 12; |
|
|
|
#endif |
|
|
|
#endif |
|
|
@ -564,7 +582,7 @@ epoxy_get_bootstrap_proc_address(const char *name) |
|
|
|
* non-X11 ES2 context from loading a bunch of X11 junk). |
|
|
|
* non-X11 ES2 context from loading a bunch of X11 junk). |
|
|
|
*/ |
|
|
|
*/ |
|
|
|
#if PLATFORM_HAS_EGL |
|
|
|
#if PLATFORM_HAS_EGL |
|
|
|
get_dlopen_handle(&api.egl_handle, "libEGL.so.1", false); |
|
|
|
get_dlopen_handle(&api.egl_handle, EGL_LIB, false); |
|
|
|
if (api.egl_handle) { |
|
|
|
if (api.egl_handle) { |
|
|
|
switch (epoxy_egl_get_current_gl_context_api()) { |
|
|
|
switch (epoxy_egl_get_current_gl_context_api()) { |
|
|
|
case EGL_OPENGL_API: |
|
|
|
case EGL_OPENGL_API: |
|
|
@ -575,7 +593,7 @@ epoxy_get_bootstrap_proc_address(const char *name) |
|
|
|
* us. Try the GLES2 implementation first, and fall back |
|
|
|
* us. Try the GLES2 implementation first, and fall back |
|
|
|
* to GLES1 otherwise. |
|
|
|
* to GLES1 otherwise. |
|
|
|
*/ |
|
|
|
*/ |
|
|
|
get_dlopen_handle(&api.gles2_handle, "libGLESv2.so.2", false); |
|
|
|
get_dlopen_handle(&api.gles2_handle, GLES2_LIB, false); |
|
|
|
if (api.gles2_handle) |
|
|
|
if (api.gles2_handle) |
|
|
|
return epoxy_gles2_dlsym(name); |
|
|
|
return epoxy_gles2_dlsym(name); |
|
|
|
else |
|
|
|
else |
|
|
|