mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-04 00:30:11 +01:00
glx: Allow a context-specific fallback for glXGetProcAddress
In applegl, GLX advertises the same extensions provided by OpenGL.framework even if such extensions are not provided by glapi. This allows a client to get access to such API. Signed-off-by: Jeremy Huddleston <jeremyhu@apple.com>
This commit is contained in:
parent
fbd7448977
commit
559e4f8ebc
7 changed files with 20 additions and 1 deletions
|
|
@ -34,10 +34,12 @@
|
|||
#if defined(GLX_USE_APPLEGL)
|
||||
|
||||
#include <stdbool.h>
|
||||
#include <dlfcn.h>
|
||||
|
||||
#include "glxclient.h"
|
||||
#include "apple_glx_context.h"
|
||||
#include "apple_glx.h"
|
||||
#include "apple_cgl.h"
|
||||
#include "glx_error.h"
|
||||
|
||||
static void
|
||||
|
|
@ -82,6 +84,12 @@ applegl_wait_x(struct glx_context *gc)
|
|||
apple_glx_waitx(dpy, gc->driContext);
|
||||
}
|
||||
|
||||
static void *
|
||||
applegl_get_proc_address(const char *symbol)
|
||||
{
|
||||
return dlsym(apple_cgl_get_dl_handle(), symbol);
|
||||
}
|
||||
|
||||
static const struct glx_context_vtable applegl_context_vtable = {
|
||||
applegl_destroy_context,
|
||||
applegl_bind_context,
|
||||
|
|
@ -91,6 +99,7 @@ static const struct glx_context_vtable applegl_context_vtable = {
|
|||
DRI_glXUseXFont,
|
||||
NULL, /* bind_tex_image, */
|
||||
NULL, /* release_tex_image, */
|
||||
applegl_get_proc_address,
|
||||
};
|
||||
|
||||
struct glx_context *
|
||||
|
|
|
|||
|
|
@ -767,6 +767,7 @@ static const struct glx_context_vtable dri2_context_vtable = {
|
|||
DRI_glXUseXFont,
|
||||
dri2_bind_tex_image,
|
||||
dri2_release_tex_image,
|
||||
NULL, /* get_proc_address */
|
||||
};
|
||||
|
||||
static void
|
||||
|
|
|
|||
|
|
@ -558,6 +558,7 @@ static const struct glx_context_vtable dri_context_vtable = {
|
|||
DRI_glXUseXFont,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL, /* get_proc_address */
|
||||
};
|
||||
|
||||
static struct glx_context *
|
||||
|
|
|
|||
|
|
@ -296,6 +296,7 @@ static const struct glx_context_vtable drisw_context_vtable = {
|
|||
DRI_glXUseXFont,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL, /* get_proc_address */
|
||||
};
|
||||
|
||||
static struct glx_context *
|
||||
|
|
|
|||
|
|
@ -224,7 +224,7 @@ struct glx_context_vtable {
|
|||
GLXDrawable drawable,
|
||||
int buffer, const int *attrib_list);
|
||||
void (*release_tex_image)(Display * dpy, GLXDrawable drawable, int buffer);
|
||||
|
||||
void * (*get_proc_address)(const char *symbol);
|
||||
};
|
||||
|
||||
extern void
|
||||
|
|
|
|||
|
|
@ -2521,6 +2521,12 @@ _X_EXPORT void (*glXGetProcAddressARB(const GLubyte * procName)) (void)
|
|||
#endif
|
||||
if (!f)
|
||||
f = (gl_function) _glapi_get_proc_address((const char *) procName);
|
||||
if (!f) {
|
||||
struct glx_context *gc = __glXGetCurrentContext();
|
||||
|
||||
if (gc != NULL && gc->vtable->get_proc_address != NULL)
|
||||
f = gc->vtable->get_proc_address((const char *) procName);
|
||||
}
|
||||
}
|
||||
return f;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -335,6 +335,7 @@ static const struct glx_context_vtable indirect_context_vtable = {
|
|||
indirect_use_x_font,
|
||||
indirect_bind_tex_image,
|
||||
indirect_release_tex_image,
|
||||
NULL, /* get_proc_address */
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue