xquartz/glx: Convert to non-glapi dispatch

CGL doesn't have anything like glXGetProcAddress, and the old code just
called down to dlsym in any case.  It's a little mind-warping since
dlopening a framework actually loads multiple dylibs, but that's just
how OSX rolls.

Signed-off-by: Adam Jackson <ajax@redhat.com>
Reviewed-by: Jeremy Huddleston Sequoia <jeremyhu@apple.com>
This commit is contained in:
Adam Jackson 2013-12-03 13:45:43 -05:00 committed by Keith Packard
parent a668aa0e41
commit e61e19959d

View File

@ -48,8 +48,6 @@
#include <glxserver.h> #include <glxserver.h>
#include <glxutil.h> #include <glxutil.h>
#include <glapi.h>
#include "x-hash.h" #include "x-hash.h"
#include "visualConfigs.h" #include "visualConfigs.h"
@ -643,15 +641,20 @@ __glFloorLog2(GLuint val)
"/System/Library/Frameworks/OpenGL.framework/OpenGL" "/System/Library/Frameworks/OpenGL.framework/OpenGL"
#endif #endif
static void *opengl_framework_handle;
static glx_gpa_proc
get_proc_address(const char *sym)
{
return (glx_gpa_proc) dlsym(opengl_framework_handle, sym);
}
static void static void
setup_dispatch_table(void) setup_dispatch_table(void)
{ {
static struct _glapi_table *disp = NULL;
static void *handle;
const char *opengl_framework_path; const char *opengl_framework_path;
if (disp) { if (opengl_framework_handle) {
_glapi_set_dispatch(disp);
return; return;
} }
@ -661,16 +664,13 @@ setup_dispatch_table(void)
} }
(void)dlerror(); /*drain dlerror */ (void)dlerror(); /*drain dlerror */
handle = dlopen(opengl_framework_path, RTLD_LOCAL); opengl_framework_handle = dlopen(opengl_framework_path, RTLD_LOCAL);
if (!handle) { if (!opengl_framework_handle) {
ErrorF("unable to dlopen %s : %s, using RTLD_DEFAULT\n", ErrorF("unable to dlopen %s : %s, using RTLD_DEFAULT\n",
opengl_framework_path, dlerror()); opengl_framework_path, dlerror());
handle = RTLD_DEFAULT; opengl_framework_handle = RTLD_DEFAULT;
} }
disp = _glapi_create_table_from_handle(handle, "gl"); __glXsetGetProcAddress(get_proc_address);
assert(disp);
_glapi_set_dispatch(disp);
} }