From 31b8fd16499e7a71afe43b9859fe312e2706d15b Mon Sep 17 00:00:00 2001 From: Jean-Philippe Andre Date: Fri, 6 Nov 2015 15:33:08 +0900 Subject: [PATCH] Evas GL: Delete shaders after linking programs The shaders eat up some memory and we don't need them after linking the shader program. --- src/modules/evas/engines/gl_common/evas_gl_common.h | 5 ++--- src/modules/evas/engines/gl_common/evas_gl_shader.c | 11 +++++------ 2 files changed, 7 insertions(+), 9 deletions(-) diff --git a/src/modules/evas/engines/gl_common/evas_gl_common.h b/src/modules/evas/engines/gl_common/evas_gl_common.h index 115ca28e2a..0d7b21e07b 100644 --- a/src/modules/evas/engines/gl_common/evas_gl_common.h +++ b/src/modules/evas/engines/gl_common/evas_gl_common.h @@ -97,10 +97,9 @@ typedef Eina_Bool (*evas_gl_make_current_cb)(void *engine_data, void *doit); struct _Evas_GL_Program { - GLuint vert, frag, prog; - unsigned int flags, hitcount; + unsigned int flags, hitcount, tex_count; + GLuint prog; - int tex_count; Eina_Bool reset : 1; Eina_Bool bin_saved : 1; }; diff --git a/src/modules/evas/engines/gl_common/evas_gl_shader.c b/src/modules/evas/engines/gl_common/evas_gl_shader.c index df3d396181..89ceff0a30 100644 --- a/src/modules/evas/engines/gl_common/evas_gl_shader.c +++ b/src/modules/evas/engines/gl_common/evas_gl_shader.c @@ -163,13 +163,13 @@ _evas_gl_common_shader_program_binary_load(Eet_File *ef, unsigned int flags) p = calloc(1, sizeof(*p)); p->flags = flags; p->prog = prg; - p->vert = vtx; - p->frag = frg; p->reset = EINA_TRUE; p->bin_saved = EINA_TRUE; evas_gl_common_shader_textures_bind(p); finish: + if (vtx) glDeleteShader(vtx); + if (frg) glDeleteShader(frg); free(formats); if (!direct) free(data); return p; @@ -330,8 +330,6 @@ static void _shaders_hash_free_cb(void *data) { Evas_GL_Program *p = data; - if (p->vert) glDeleteShader(p->vert); - if (p->frag) glDeleteShader(p->frag); if (p->prog) glDeleteProgram(p->prog); free(p); } @@ -613,10 +611,11 @@ evas_gl_common_shader_compile(unsigned int flags, const char *vertex, p = calloc(1, sizeof(*p)); p->flags = flags; p->prog = prg; - p->vert = vtx; - p->frag = frg; p->reset = EINA_TRUE; + glDeleteShader(vtx); + glDeleteShader(frg); + return p; }