render/egl: make wlr_egl context private, replace them with public wlr_egl_context functions

This commit is contained in:
Simon Zeni 2021-09-21 10:00:17 -04:00
parent 6eff6c365b
commit f70f37a2c2
3 changed files with 42 additions and 4 deletions

View file

@ -41,4 +41,19 @@ bool wlr_egl_destroy_image(struct wlr_egl *egl, EGLImageKHR image);
int wlr_egl_dup_drm_fd(struct wlr_egl *egl); int wlr_egl_dup_drm_fd(struct wlr_egl *egl);
/**
* Makes the provided EGL context current
*
* Callers are expected to clear the current context when they are done by
* calling wlr_egl_unset_current.
*/
bool wlr_egl_make_current(struct wlr_egl *egl);
/**
* Clears the current EGLContext
*/
bool wlr_egl_unset_current(struct wlr_egl *egl);
bool wlr_egl_is_current(struct wlr_egl *egl);
#endif #endif

View file

@ -81,11 +81,14 @@ struct wlr_egl {
* Callers are expected to clear the current context when they are done by * Callers are expected to clear the current context when they are done by
* calling wlr_egl_unset_current. * calling wlr_egl_unset_current.
*/ */
bool wlr_egl_make_current(struct wlr_egl *egl); bool wlr_egl_context_set_current(struct wlr_egl_context *ctx);
bool wlr_egl_unset_current(struct wlr_egl *egl); /**
* Clear the EGL context
*/
bool wlr_egl_context_unset_current(struct wlr_egl_context *ctx);
bool wlr_egl_is_current(struct wlr_egl *egl); bool wlr_egl_context_is_current(struct wlr_egl_context *ctx);
/** /**
* Save the current EGL context to the structure provided in the argument. * Save the current EGL context to the structure provided in the argument.

View file

@ -560,6 +560,27 @@ bool wlr_egl_is_current(struct wlr_egl *egl) {
return eglGetCurrentContext() == egl->context; return eglGetCurrentContext() == egl->context;
} }
bool wlr_egl_context_set_current(struct wlr_egl_context *ctx) {
if (!eglMakeCurrent(ctx->display, EGL_NO_SURFACE, EGL_NO_SURFACE,
ctx->context)) {
wlr_log(WLR_ERROR, "eglMakeCurrent failed");
return false;
}
return true;
}
bool wlr_egl_context_unset_current(struct wlr_egl_context *ctx) {
if (!eglMakeCurrent(ctx->display, EGL_NO_SURFACE, EGL_NO_SURFACE,
EGL_NO_CONTEXT)) {
wlr_log(WLR_ERROR, "eglMakeCurrent failed");
return false;
}
return true;
}
bool wlr_egl_context_is_current(struct wlr_egl_context *ctx) {
return eglGetCurrentContext() == ctx->context;
}
void wlr_egl_context_save(struct wlr_egl_context *context) { void wlr_egl_context_save(struct wlr_egl_context *context) {
context->display = eglGetCurrentDisplay(); context->display = eglGetCurrentDisplay();
@ -568,7 +589,6 @@ void wlr_egl_context_save(struct wlr_egl_context *context) {
context->read_surface = eglGetCurrentSurface(EGL_READ); context->read_surface = eglGetCurrentSurface(EGL_READ);
} }
bool wlr_egl_context_restore(struct wlr_egl_context *context) { bool wlr_egl_context_restore(struct wlr_egl_context *context) {
// If the saved context is a null-context, we must use the current // If the saved context is a null-context, we must use the current
// display instead of the saved display because eglMakeCurrent() can't // display instead of the saved display because eglMakeCurrent() can't