1. clean up egl better on context shutdown
authorraster <raster@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Tue, 23 Mar 2010 09:55:02 +0000 (09:55 +0000)
committerraster <raster@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Tue, 23 Mar 2010 09:55:02 +0000 (09:55 +0000)
2. clean up pprograms/shaders on shared shutdown

git-svn-id: http://svn.enlightenment.org/svn/e/trunk/evas@47386 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33

src/modules/engines/gl_common/evas_gl_common.h
src/modules/engines/gl_common/evas_gl_context.c
src/modules/engines/gl_common/evas_gl_shader.c
src/modules/engines/gl_x11/evas_x_main.c

index 6049641..ce4fc1c 100644 (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);
 
index d5b5e76..5ff095c 100644 (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);
index 4521ccc..d16d256 100644 (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);
+}
index 63e63be..b497e0e 100644 (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