From d010922282580a32dfebcda12ee1c307b3ef6005 Mon Sep 17 00:00:00 2001 From: Jeremy Huddleston Sequoia Date: Mon, 18 Jan 2016 09:49:55 -0800 Subject: [PATCH 4/4] darwin: Use GLX instead of OpenGL.framework if it is the current context Also makes a stab at similar support for Win32 anholt/libepoxy#63 Signed-off-by: Jeremy Huddleston Sequoia Fetched from pull #81 on github for libepoxy: https://github.com/anholt/libepoxy/pull/81/commits Signed-off-by: Gustavo Zacarias --- src/dispatch_common.c | 29 ++++++++++++++++------------- 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/src/dispatch_common.c b/src/dispatch_common.c index 163d348..cb9f76a 100644 --- a/src/dispatch_common.c +++ b/src/dispatch_common.c @@ -482,16 +482,20 @@ epoxy_glx_dlsym(const char *name) void * epoxy_gl_dlsym(const char *name) { -#ifdef _WIN32 +#if defined(_WIN32) || defined(__APPLE__) +if (!epoxy_current_context_is_glx()) { +# if defined(_WIN32) return do_dlsym(&api.gl_handle, "OPENGL32", name, true); -#elif defined(__APPLE__) +# elif defined(__APPLE__) return do_dlsym(&api.gl_handle, "/System/Library/Frameworks/OpenGL.framework/Versions/Current/OpenGL", name, true); -#else +# endif +} +#endif + /* There's no library for desktop GL support independent of GLX. */ return epoxy_glx_dlsym(name); -#endif } void * @@ -615,7 +619,7 @@ epoxy_get_bootstrap_proc_address(const char *name) */ #if PLATFORM_HAS_GLX if (api.glx_handle && glXGetCurrentContext()) - return epoxy_gl_dlsym(name); + return epoxy_glx_dlsym(name); #endif /* If epoxy hasn't loaded any API-specific library yet, try to @@ -644,22 +648,17 @@ epoxy_get_bootstrap_proc_address(const char *name) } #endif /* PLATFORM_HAS_EGL */ - /* Fall back to GLX */ + /* Fall back to the platform default */ return epoxy_gl_dlsym(name); } void * epoxy_get_proc_address(const char *name) { -#ifdef _WIN32 - return wglGetProcAddress(name); -#elif defined(__APPLE__) - return epoxy_gl_dlsym(name); -#else #if PLATFORM_HAS_GLX if (epoxy_current_context_is_glx()) { return glXGetProcAddressARB((const GLubyte *)name); - } else + } #endif /* PLATFORM_HAS_GLX */ #if PLATFORM_HAS_EGL { @@ -674,8 +673,12 @@ epoxy_get_proc_address(const char *name) } } #endif /* PLATFORM_HAS_EGL */ +#if defined(_WIN32) + return wglGetProcAddress(name); +#elif defined(__APPLE__) + return epoxy_gl_dlsym(name); +#endif errx(1, "Couldn't find current GLX or EGL context.\n"); -#endif /* _WIN32 | __APPLE__*/ } WRAPPER_VISIBILITY (void)