X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;ds=sidebyside;f=src%2Fglx%2Fapplegl_glx.c;h=c086e5146a84f1f3d2ad77d1ba772c89e19fb11a;hb=d243bf10326b4eb5163e4f1ae35ca8692a0f6839;hp=ff899df377098df2bb496db0b04dccc798ee7d18;hpb=7c5f37c032231ad144a8a5c5a0b18f3e26c0aea7;p=mesa.git diff --git a/src/glx/applegl_glx.c b/src/glx/applegl_glx.c index ff899df3770..c086e5146a8 100644 --- a/src/glx/applegl_glx.c +++ b/src/glx/applegl_glx.c @@ -34,16 +34,18 @@ #if defined(GLX_USE_APPLEGL) #include +#include #include "glxclient.h" -#include "apple_glx_context.h" -#include "apple_glx.h" +#include "apple/apple_glx_context.h" +#include "apple/apple_glx.h" +#include "apple/apple_cgl.h" #include "glx_error.h" static void applegl_destroy_context(struct glx_context *gc) { - apple_glx_destroy_context(&gc->driContext, gc->currentDpy); + apple_glx_destroy_context(&gc->driContext, gc->psc->dpy); } static int @@ -59,12 +61,32 @@ applegl_bind_context(struct glx_context *gc, struct glx_context *old, if (error) return 1; /* GLXBadContext is the same as Success (0) */ + apple_glapi_set_dispatch(); + return Success; } static void applegl_unbind_context(struct glx_context *gc, struct glx_context *new) { + Display *dpy; + bool error; + + /* If we don't have a context, then we have nothing to unbind */ + if (!gc) + return; + + /* If we have a new context, keep this one around and remove it during bind. */ + if (new) + return; + + dpy = gc->psc->dpy; + + error = apple_glx_make_current_context(dpy, + (gc != &dummyContext) ? gc->driContext : NULL, + NULL, None); + + apple_glx_diagnostic("%s: error %s\n", __func__, error ? "YES" : "NO"); } static void @@ -80,15 +102,22 @@ 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, - applegl_unbind_context, - applegl_wait_gl, - applegl_wait_x, - DRI_glXUseXFont, - NULL, /* bind_tex_image, */ - NULL, /* release_tex_image, */ + .destroy = applegl_destroy_context, + .bind = applegl_bind_context, + .unbind = applegl_unbind_context, + .wait_gl = applegl_wait_gl, + .wait_x = applegl_wait_x, + .use_x_font = DRI_glXUseXFont, + .bind_tex_image = NULL, + .release_tex_image = NULL, + .get_proc_address = applegl_get_proc_address, }; struct glx_context * @@ -99,25 +128,23 @@ applegl_create_context(struct glx_screen *psc, struct glx_context *gc; int errorcode; bool x11error; - Display *dpy; + Display *dpy = psc->dpy; + int screen = psc->scr; /* TODO: Integrate this with apple_glx_create_context and make * struct apple_glx_context inherit from struct glx_context. */ - gc = Xcalloc(1, sizeof (*gc)); + gc = calloc(1, sizeof(*gc)); if (gc == NULL) return NULL; if (!glx_context_init(gc, psc, config)) { - Xfree(gc); + free(gc); return NULL; } - dpy = gc->psc->dpy; - gc->vtable = &applegl_context_vtable; gc->driContext = NULL; - gc->do_destroy = False; /* TODO: darwin: Integrate with above to do indirect */ if(apple_glx_create_context(&gc->driContext, dpy, screen, config, @@ -137,8 +164,11 @@ applegl_create_context(struct glx_screen *psc, return gc; } -struct glx_screen_vtable applegl_screen_vtable = { - applegl_create_context +static const struct glx_screen_vtable applegl_screen_vtable = { + .create_context = applegl_create_context, + .create_context_attribs = NULL, + .query_renderer_integer = NULL, + .query_renderer_string = NULL, }; _X_HIDDEN struct glx_screen * @@ -146,11 +176,10 @@ applegl_create_screen(int screen, struct glx_display * priv) { struct glx_screen *psc; - psc = Xmalloc(sizeof *psc); + psc = calloc(1, sizeof *psc); if (psc == NULL) return NULL; - memset(psc, 0, sizeof *psc); glx_screen_init(psc, screen, priv); psc->vtable = &applegl_screen_vtable;