96 lines
2.7 KiB
Diff
96 lines
2.7 KiB
Diff
|
From d010922282580a32dfebcda12ee1c307b3ef6005 Mon Sep 17 00:00:00 2001
|
||
|
From: Jeremy Huddleston Sequoia <jeremyhu@apple.com>
|
||
|
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 <jeremyhu@apple.com>
|
||
|
Fetched from pull #81 on github for libepoxy:
|
||
|
https://github.com/anholt/libepoxy/pull/81/commits
|
||
|
Signed-off-by: Gustavo Zacarias <gustavo@zacarias.com.ar>
|
||
|
---
|
||
|
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)
|