Fix egl image leak in gles renderer

This commit is contained in:
nyorain 2017-08-12 11:41:40 +02:00
parent 65a8999242
commit 862bc9783f
1 changed files with 13 additions and 1 deletions

View File

@ -179,6 +179,11 @@ static bool gles2_texture_upload_drm(struct wlr_texture_state *tex,
GL_CALL(glBindTexture(GL_TEXTURE_2D, tex->tex_id)); GL_CALL(glBindTexture(GL_TEXTURE_2D, tex->tex_id));
EGLint attribs[] = { EGL_WAYLAND_PLANE_WL, 0, EGL_NONE }; 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, tex->image = wlr_egl_create_image(tex->egl, EGL_WAYLAND_BUFFER_WL,
(EGLClientBuffer*) buf, attribs); (EGLClientBuffer*) buf, attribs);
if (!tex->image) { 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) { static void gles2_texture_destroy(struct wlr_texture_state *texture) {
wl_signal_emit(&texture->wlr_texture->destroy_signal, texture->wlr_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); free(texture);
} }