Evas_GL_Texture *evas_gl_common_texture_dynamic_new(Evas_Engine_GL_Context *gc, Evas_GL_Image *im);
void evas_gl_common_texture_update(Evas_GL_Texture *tex, RGBA_Image *im);
void evas_gl_common_texture_upload(Evas_GL_Texture *tex, RGBA_Image *im, unsigned int bytes_count);
-void evas_gl_common_texture_free(Evas_GL_Texture *tex, Eina_Bool force);
+Eina_Bool evas_gl_common_texture_free(Evas_GL_Texture *tex, Eina_Bool force);
Evas_GL_Texture *evas_gl_common_texture_alpha_new(Evas_Engine_GL_Context *gc, DATA8 *pixels, unsigned int w, unsigned int h, int fh);
void evas_gl_common_texture_alpha_update(Evas_GL_Texture *tex, DATA8 *pixels, unsigned int w, unsigned int h, int fh);
Evas_GL_Texture *evas_gl_common_texture_yuv_new(Evas_Engine_GL_Context *gc, DATA8 **rows, unsigned int w, unsigned int h);
{
if (_evas_gl_image_cache_add(im)) return;
}
- if (im->tex) evas_gl_common_texture_free(im->tex, EINA_TRUE);
+ if (im->tex)
+ {
+ if (!evas_gl_common_texture_free(im->tex, EINA_TRUE))
+ {
+ /* if texture is not freed, we need to assign im to NULL
+ because after this point im will be freed */
+ im->tex->im = NULL;
+ }
+ }
if (im->im)
evas_cache_image_drop(&im->im->cache_entry);
im->cache_entry.flags.textured = 1;
}
-void
+Eina_Bool
evas_gl_common_texture_free(Evas_GL_Texture *tex, Eina_Bool force)
{
- if (!tex) return;
+ if (!tex) return EINA_FALSE;
if (force)
{
evas_gl_preload_pop(tex);
evas_gl_preload_target_unregister(tex, eina_list_data_get(tex->targets));
}
tex->references--;
- if (tex->references != 0) return;
+ if (tex->references != 0) return EINA_FALSE;
// TIZEN ONLY (20180823): Use PIO for Paletted png
if(tex->has_palette)
}
evas_gl_common_texture_light_free(tex);
+ return EINA_TRUE;
}
Evas_GL_Texture *