diff --git a/legacy/evas/src/modules/engines/gl_common/evas_gl_common.h b/legacy/evas/src/modules/engines/gl_common/evas_gl_common.h index 604964149b..ce4fc1c562 100644 --- a/legacy/evas/src/modules/engines/gl_common/evas_gl_common.h +++ b/legacy/evas/src/modules/engines/gl_common/evas_gl_common.h @@ -324,6 +324,7 @@ void evas_gl_common_shader_program_init(Evas_GL_Program *p, Evas_GL_Program_Source *vert, Evas_GL_Program_Source *frag, const char *name); +void evas_gl_common_shader_program_shutdown(Evas_GL_Program *p); void evas_gl_common_rect_draw(Evas_GL_Context *gc, int x, int y, int w, int h); diff --git a/legacy/evas/src/modules/engines/gl_common/evas_gl_context.c b/legacy/evas/src/modules/engines/gl_common/evas_gl_context.c index d5b5e768fe..5ff095c754 100644 --- a/legacy/evas/src/modules/engines/gl_common/evas_gl_context.c +++ b/legacy/evas/src/modules/engines/gl_common/evas_gl_context.c @@ -393,7 +393,7 @@ evas_gl_common_context_new(void) GLERR(__FUNCTION__, __FILE__, __LINE__, ""); glEnableVertexAttribArray(SHAD_COLOR); GLERR(__FUNCTION__, __FILE__, __LINE__, ""); - + evas_gl_common_shader_program_init(&(shared->shader.rect), &(shader_rect_vert_src), &(shader_rect_frag_src), @@ -485,6 +485,17 @@ evas_gl_common_context_free(Evas_GL_Context *gc) if (gc->shared->references == 0) { + evas_gl_common_shader_program_shutdown(&(gc->shared->shader.rect)); + evas_gl_common_shader_program_shutdown(&(gc->shared->shader.font)); + evas_gl_common_shader_program_shutdown(&(gc->shared->shader.img)); + evas_gl_common_shader_program_shutdown(&(gc->shared->shader.img_nomul)); + evas_gl_common_shader_program_shutdown(&(gc->shared->shader.img_bgra)); + evas_gl_common_shader_program_shutdown(&(gc->shared->shader.img_bgra_nomul)); + evas_gl_common_shader_program_shutdown(&(gc->shared->shader.yuv)); + evas_gl_common_shader_program_shutdown(&(gc->shared->shader.yuv_nomul)); + evas_gl_common_shader_program_shutdown(&(gc->shared->shader.tex)); + evas_gl_common_shader_program_shutdown(&(gc->shared->shader.tex_nomul)); + while (gc->shared->images) { evas_gl_common_image_free(gc->shared->images->data); diff --git a/legacy/evas/src/modules/engines/gl_common/evas_gl_shader.c b/legacy/evas/src/modules/engines/gl_common/evas_gl_shader.c index 4521ccc577..d16d256063 100644 --- a/legacy/evas/src/modules/engines/gl_common/evas_gl_shader.c +++ b/legacy/evas/src/modules/engines/gl_common/evas_gl_shader.c @@ -492,3 +492,11 @@ evas_gl_common_shader_program_init(Evas_GL_Program *p, return; } } + +void +evas_gl_common_shader_program_shutdown(Evas_GL_Program *p) +{ + glDeleteShader(p->vert); + glDeleteShader(p->frag); + glDeleteProgram(p->prog); +} diff --git a/legacy/evas/src/modules/engines/gl_x11/evas_x_main.c b/legacy/evas/src/modules/engines/gl_x11/evas_x_main.c index 63e63bee05..b497e0e10a 100644 --- a/legacy/evas/src/modules/engines/gl_x11/evas_x_main.c +++ b/legacy/evas/src/modules/engines/gl_x11/evas_x_main.c @@ -398,8 +398,9 @@ eng_window_free(Evas_GL_X11_Window *gw) eglDestroySurface(gw->egl_disp, gw->egl_surface[0]); if (win_count == 0) { - if (context) eglDestroyContext(gw->disp, context); - eglTerminate(gw->disp); + if (context) eglDestroyContext(gw->egl_disp, context); + eglMakeCurrent(gw->egl_disp, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT); + eglTerminate(gw->egl_disp); context = EGL_NO_CONTEXT; } #else