From 02a086599c069768987bc9c6d9a8f79b6bfd8811 Mon Sep 17 00:00:00 2001 From: Simon Ser Date: Thu, 14 Jan 2021 12:00:06 +0100 Subject: [PATCH] render/gles2: save/restore EGL context in destroy_buffer It can be surprising that destroying a buffer changes the EGL context, especially since this can be triggered from anywhere wlr_buffer_unlock is called. Prevent this from happening by saving and restoring the EGL context. --- render/gles2/renderer.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/render/gles2/renderer.c b/render/gles2/renderer.c index 428fcd95..8e7c37a8 100644 --- a/render/gles2/renderer.c +++ b/render/gles2/renderer.c @@ -41,6 +41,8 @@ static void destroy_buffer(struct wlr_gles2_buffer *buffer) { wl_list_remove(&buffer->link); wl_list_remove(&buffer->buffer_destroy.link); + struct wlr_egl_context prev_ctx; + wlr_egl_save_context(&prev_ctx); wlr_egl_make_current(buffer->renderer->egl); push_gles2_debug(buffer->renderer); @@ -51,7 +53,9 @@ static void destroy_buffer(struct wlr_gles2_buffer *buffer) { pop_gles2_debug(buffer->renderer); wlr_egl_destroy_image(buffer->renderer->egl, buffer->image); - wlr_egl_unset_current(buffer->renderer->egl); + + wlr_egl_restore_context(&prev_ctx); + free(buffer); }