aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--render/egl.c15
1 files changed, 14 insertions, 1 deletions
diff --git a/render/egl.c b/render/egl.c
index 797d8f15..f99b37f9 100644
--- a/render/egl.c
+++ b/render/egl.c
@@ -459,7 +459,20 @@ void wlr_egl_save_context(struct wlr_egl_context *context) {
}
bool wlr_egl_restore_context(struct wlr_egl_context *context) {
- return eglMakeCurrent(context->display, context->draw_surface,
+ // If the saved context is a null-context, we must use the current
+ // display instead of the saved display because eglMakeCurrent() can't
+ // handle EGL_NO_DISPLAY.
+ EGLDisplay display = context->display == EGL_NO_DISPLAY ?
+ eglGetCurrentDisplay() : context->display;
+
+ // If the current display is also EGL_NO_DISPLAY, we assume that there
+ // is currently no context set and no action needs to be taken to unset
+ // the context.
+ if (display == EGL_NO_DISPLAY) {
+ return true;
+ }
+
+ return eglMakeCurrent(display, context->draw_surface,
context->read_surface, context->context);
}