From 6ef5d18757ef5ae2f38d41d914f7d7df100e3799 Mon Sep 17 00:00:00 2001 From: Andri Yngvason Date: Mon, 13 Jul 2020 18:45:57 +0000 Subject: [PATCH] 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 --- render/egl.c | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) 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); }