diff options
author | nyorain <nyorain@gmail.com> | 2017-08-12 11:41:40 +0200 |
---|---|---|
committer | nyorain <nyorain@gmail.com> | 2017-08-12 11:41:40 +0200 |
commit | 862bc9783fec224c2fc855169f5d615523702d6a (patch) | |
tree | d997fd10cfb3999cf1f68b8cdeb9ce4f6c28d4e6 /render | |
parent | 65a899924221c3104800a8676852b34b0cd7223d (diff) |
Fix egl image leak in gles renderer
Diffstat (limited to 'render')
-rw-r--r-- | render/gles2/texture.c | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/render/gles2/texture.c b/render/gles2/texture.c index 5a28edbd..76d02419 100644 --- a/render/gles2/texture.c +++ b/render/gles2/texture.c @@ -179,6 +179,11 @@ static bool gles2_texture_upload_drm(struct wlr_texture_state *tex, GL_CALL(glBindTexture(GL_TEXTURE_2D, tex->tex_id)); EGLint attribs[] = { EGL_WAYLAND_PLANE_WL, 0, EGL_NONE }; + + if (tex->image) { + wlr_egl_destroy_image(tex->egl, tex->image); + } + tex->image = wlr_egl_create_image(tex->egl, EGL_WAYLAND_BUFFER_WL, (EGLClientBuffer*) buf, attribs); if (!tex->image) { @@ -216,7 +221,14 @@ static void gles2_texture_bind(struct wlr_texture_state *texture) { static void gles2_texture_destroy(struct wlr_texture_state *texture) { wl_signal_emit(&texture->wlr_texture->destroy_signal, texture->wlr_texture); - GL_CALL(glDeleteTextures(1, &texture->tex_id)); + if (texture->tex_id) { + GL_CALL(glDeleteTextures(1, &texture->tex_id)); + } + + if (texture->image) { + wlr_egl_destroy_image(texture->egl, texture->image); + } + free(texture); } |