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 <glxutil.h>
#include <glapi.h>
#include "x-hash.h"
#include "visualConfigs.h"
@ -643,15 +641,20 @@ __glFloorLog2(GLuint val)
"/System/Library/Frameworks/OpenGL.framework/OpenGL"
#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
setup_dispatch_table(void)
{
static struct _glapi_table *disp = NULL;
static void *handle;
const char *opengl_framework_path;
if (disp) {
_glapi_set_dispatch(disp);
if (opengl_framework_handle) {
return;
}
@ -661,16 +664,13 @@ setup_dispatch_table(void)
}
(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",
opengl_framework_path, dlerror());
handle = RTLD_DEFAULT;
opengl_framework_handle = RTLD_DEFAULT;
}
disp = _glapi_create_table_from_handle(handle, "gl");
assert(disp);
_glapi_set_dispatch(disp);
__glXsetGetProcAddress(get_proc_address);
}