bool wegl_display_supports_context_api(struct wcore_display *wc_dpy, int32_t waffle_context_api) { struct wegl_display *dpy = wegl_display(wc_dpy); struct wcore_platform *wc_plat = dpy->wcore.platform; int32_t waffle_dl; switch (waffle_context_api) { case WAFFLE_CONTEXT_OPENGL: waffle_dl = WAFFLE_DL_OPENGL; break; case WAFFLE_CONTEXT_OPENGL_ES1: waffle_dl = WAFFLE_DL_OPENGL_ES1; break; case WAFFLE_CONTEXT_OPENGL_ES2: waffle_dl = WAFFLE_DL_OPENGL_ES2; break; case WAFFLE_CONTEXT_OPENGL_ES3: if (!dpy->KHR_create_context) return false; waffle_dl = WAFFLE_DL_OPENGL_ES3; break; default: wcore_error_internal("waffle_context_api has bad value %#x", waffle_context_api); return false; } return wc_plat->vtbl->dl_can_open(wc_plat, waffle_dl); }
bool wegl_make_current(struct wcore_platform *wc_plat, struct wcore_display *wc_dpy, struct wcore_window *wc_window, struct wcore_context *wc_ctx) { struct wegl_platform *plat = wegl_platform(wc_plat); EGLSurface surface = wc_window ? wegl_window(wc_window)->egl : NULL; bool ok; ok = plat->eglMakeCurrent(wegl_display(wc_dpy)->egl, surface, surface, wc_ctx ? wegl_context(wc_ctx)->egl : NULL); if (!ok) wegl_emit_error(plat, "eglMakeCurrent"); return ok; }