1. clean up egl better on context shutdown

2. clean up pprograms/shaders on shared shutdown



SVN revision: 47386
This commit is contained in:
Carsten Haitzler 2010-03-23 09:55:02 +00:00
parent 8126debb06
commit 3cf6e2fde7
4 changed files with 24 additions and 3 deletions

View File

@ -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);

View File

@ -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);

View File

@ -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);
}

View File

@ -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