aboutsummaryrefslogtreecommitdiff
path: root/render
diff options
context:
space:
mode:
authorSimon Ser <contact@emersion.fr>2021-04-21 12:02:16 +0200
committerSimon Ser <contact@emersion.fr>2021-04-22 15:44:49 +0200
commit661ba495640069b3484441be1631f70187066656 (patch)
tree17be7dd7b7b35a294e1c0cf0d47c926008a8114f /render
parent9901d49fa52bb8405078537fe95c9aa8c6bdcf73 (diff)
render/gles2: destroy textures on renderer teardown
Diffstat (limited to 'render')
-rw-r--r--render/gles2/renderer.c6
-rw-r--r--render/gles2/texture.c8
2 files changed, 14 insertions, 0 deletions
diff --git a/render/gles2/renderer.c b/render/gles2/renderer.c
index 2f1e506b..79861e8f 100644
--- a/render/gles2/renderer.c
+++ b/render/gles2/renderer.c
@@ -542,6 +542,11 @@ static void gles2_destroy(struct wlr_renderer *wlr_renderer) {
destroy_buffer(buffer);
}
+ struct wlr_gles2_texture *tex, *tex_tmp;
+ wl_list_for_each_safe(tex, tex_tmp, &renderer->textures, link) {
+ wlr_texture_destroy(&tex->wlr_texture);
+ }
+
push_gles2_debug(renderer);
glDeleteProgram(renderer->shaders.quad.program);
glDeleteProgram(renderer->shaders.tex_rgba.program);
@@ -763,6 +768,7 @@ struct wlr_renderer *wlr_gles2_renderer_create(struct wlr_egl *egl) {
wlr_renderer_init(&renderer->wlr_renderer, &renderer_impl);
wl_list_init(&renderer->buffers);
+ wl_list_init(&renderer->textures);
renderer->egl = egl;
renderer->exts_str = exts_str;
diff --git a/render/gles2/texture.c b/render/gles2/texture.c
index d7a052e9..2b08dd50 100644
--- a/render/gles2/texture.c
+++ b/render/gles2/texture.c
@@ -105,6 +105,8 @@ static void gles2_texture_destroy(struct wlr_texture *wlr_texture) {
struct wlr_gles2_texture *texture = gles2_get_texture(wlr_texture);
+ wl_list_remove(&texture->link);
+
struct wlr_egl_context prev_ctx;
wlr_egl_save_context(&prev_ctx);
wlr_egl_make_current(texture->renderer->egl);
@@ -181,6 +183,8 @@ struct wlr_texture *gles2_texture_from_pixels(struct wlr_renderer *wlr_renderer,
wlr_egl_restore_context(&prev_ctx);
+ wl_list_insert(&renderer->textures, &texture->link);
+
return &texture->wlr_texture;
}
@@ -248,6 +252,8 @@ struct wlr_texture *gles2_texture_from_wl_drm(struct wlr_renderer *wlr_renderer,
wlr_egl_restore_context(&prev_ctx);
+ wl_list_insert(&renderer->textures, &texture->link);
+
return &texture->wlr_texture;
error_texture:
@@ -316,6 +322,8 @@ struct wlr_texture *gles2_texture_from_dmabuf(struct wlr_renderer *wlr_renderer,
wlr_egl_restore_context(&prev_ctx);
+ wl_list_insert(&renderer->textures, &texture->link);
+
return &texture->wlr_texture;
}