summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Anholt <eric@anholt.net>2014-03-19 17:47:01 -0700
committerEric Anholt <eric@anholt.net>2014-03-19 18:34:30 -0700
commite6d9bb971bfeb9e3990ee54bdc84b701e1eaabd8 (patch)
treeae55a356113cabab5be1a156c770a1ff9d8809ae
parent698185e24a35f046d29e440b0edc4f9737f2f76d (diff)
downloadlibepoxy-e6d9bb971bfeb9e3990ee54bdc84b701e1eaabd8.tar.gz
Try to use glXGPA() for core funcs if the current context is GLX.
Fixes the GLX-only subtest of egl_and_glx_different_pointers. Now what remains is dispatch tables for when you're actively using both. Fixes #23
-rw-r--r--src/dispatch_common.c30
-rw-r--r--test/Makefile.am1
2 files changed, 13 insertions, 18 deletions
diff --git a/src/dispatch_common.c b/src/dispatch_common.c
index 6e8589f..2bb7799 100644
--- a/src/dispatch_common.c
+++ b/src/dispatch_common.c
@@ -499,13 +499,7 @@ epoxy_get_proc_address(const char *name)
#elif defined(__APPLE__)
return epoxy_gl_dlsym(name);
#else
- if (api.egl_handle) {
-#if PLATFORM_HAS_EGL
- return eglGetProcAddress(name);
-#else
- return NULL;
-#endif
- } else if (api.glx_handle) {
+ if (api.glx_handle && glXGetCurrentContext()) {
return glXGetProcAddressARB((const GLubyte *)name);
} else {
/* If the application hasn't explicitly called some of our GLX
@@ -516,34 +510,36 @@ epoxy_get_proc_address(const char *name)
* application's namespace, then use that.
*/
PFNGLXGETPROCADDRESSARBPROC glx_gpa;
-
#if PLATFORM_HAS_EGL
PFNEGLGETPROCADDRESSPROC egl_gpa;
- egl_gpa = dlsym(NULL, "eglGetProcAddress");
- if (egl_gpa)
- return egl_gpa(name);
#endif
glx_gpa = dlsym(NULL, "glXGetProcAddressARB");
- if (glx_gpa)
+ if (glx_gpa && glXGetCurrentContext())
return glx_gpa((const GLubyte *)name);
#if PLATFORM_HAS_EGL
+ egl_gpa = dlsym(NULL, "eglGetProcAddress");
+ if (egl_gpa)
+ return egl_gpa(name);
+#endif /* PLATFORM_HAS_EGL */
+
/* OK, couldn't find anything in the app's address space.
* Presumably they dlopened with RTLD_LOCAL, which hides it
* from us. Just go dlopen()ing likely libraries and try them.
*/
+ glx_gpa = do_dlsym(&api.glx_handle, GLX_LIB, "glXGetProcAddressARB",
+ false);
+ if (glx_gpa && glXGetCurrentContext())
+ return glx_gpa((const GLubyte *)name);
+
+#if PLATFORM_HAS_EGL
egl_gpa = do_dlsym(&api.egl_handle, "libEGL.so.1", "eglGetProcAddress",
false);
if (egl_gpa)
return egl_gpa(name);
#endif /* PLATFORM_HAS_EGL */
- return do_dlsym(&api.glx_handle, GLX_LIB, "glXGetProcAddressARB",
- false);
- if (glx_gpa)
- return glx_gpa((const GLubyte *)name);
-
errx(1, "Couldn't find GLX or EGL libraries.\n");
}
#endif
diff --git a/test/Makefile.am b/test/Makefile.am
index 40a63af..972a5db 100644
--- a/test/Makefile.am
+++ b/test/Makefile.am
@@ -64,7 +64,6 @@ check_BINARIES = $(EGL_AND_GLX_BIN)
XFAIL_TESTS = \
egl_and_glx_different_pointers_egl_glx \
- egl_and_glx_different_pointers_glx \
$()
check_PROGRAMS = $(TESTS)