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:
parent
a668aa0e41
commit
e61e19959d
|
@ -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);
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue