aboutsummaryrefslogtreecommitdiff
path: root/render/gles2
diff options
context:
space:
mode:
authorSimon Ser <contact@emersion.fr>2021-01-14 12:00:06 +0100
committerSimon Ser <contact@emersion.fr>2021-01-14 12:00:06 +0100
commit02a086599c069768987bc9c6d9a8f79b6bfd8811 (patch)
tree9ce64269fb70907362251cddf6c57ad3f649a930 /render/gles2
parentdc61f471da1a1c9264167635c286b6dcb37b3d6f (diff)
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.
Diffstat (limited to 'render/gles2')
-rw-r--r--render/gles2/renderer.c6
1 files changed, 5 insertions, 1 deletions
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);
}