aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndri Yngvason <andri@yngvason.is>2020-07-13 18:45:57 +0000
committerSimon Ser <contact@emersion.fr>2020-07-14 19:55:20 +0200
commit6ef5d18757ef5ae2f38d41d914f7d7df100e3799 (patch)
tree5c65d96fc7ac33aabb494a0327b4da4f21a3b743
parent842df2bd6c940c5f4933622987fc9a296f404d67 (diff)
render: egl: Use current display to restore NULL context
eglGetCurrentDisplay() returns EGL_NO_DISPLAY when there is no context current and eglMakeCurrent() needs a display argument. Fixes #2327
-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);
}