Evas: Set image load_error after load

In case of async preload, this avoids loading an image twice
if it already failed loading.

Thanks Minkyoung Kim for spotting this.
This commit is contained in:
Jean-Philippe Andre 2014-11-19 19:06:18 +09:00
parent 9afe5ffb9d
commit 42d2f8a12b
1 changed files with 21 additions and 14 deletions

View File

@ -762,6 +762,7 @@ void
evas_gl_common_image_update(Evas_Engine_GL_Context *gc, Evas_GL_Image *im) evas_gl_common_image_update(Evas_Engine_GL_Context *gc, Evas_GL_Image *im)
{ {
Image_Entry *ie; Image_Entry *ie;
if (!im->im) return; if (!im->im) return;
ie = &im->im->cache_entry; ie = &im->im->cache_entry;
evas_gl_common_image_alloc_ensure(im); evas_gl_common_image_alloc_ensure(im);
@ -808,33 +809,37 @@ evas_gl_common_image_update(Evas_Engine_GL_Context *gc, Evas_GL_Image *im)
#ifdef EVAS_CSERVE2 #ifdef EVAS_CSERVE2
if (evas_cache2_image_cached(ie)) if (evas_cache2_image_cached(ie))
{ {
evas_cache2_image_load_data(ie); ie->load_error = evas_cache2_image_load_data(ie);
evas_gl_common_texture_update(im->tex, im->im); if (ie->load_error == EVAS_LOAD_ERROR_NONE)
evas_gl_common_texture_update(im->tex, im->im);
evas_cache2_image_unload_data(ie); evas_cache2_image_unload_data(ie);
} }
else else
#endif #endif
{ {
evas_cache_image_load_data(ie); ie->load_error = evas_cache_image_load_data(ie);
evas_gl_common_texture_update(im->tex, im->im); if (ie->load_error == EVAS_LOAD_ERROR_NONE)
evas_gl_common_texture_update(im->tex, im->im);
evas_cache_image_unload_data(ie); evas_cache_image_unload_data(ie);
} }
ie->flags.updated_data = 0; ie->flags.updated_data = 0;
} }
if (!im->tex) else if ((!im->tex) && (ie->load_error == EVAS_LOAD_ERROR_NONE))
{ {
#ifdef EVAS_CSERVE2 #ifdef EVAS_CSERVE2
if (evas_cache2_image_cached(ie)) if (evas_cache2_image_cached(ie))
{ {
evas_cache2_image_load_data(ie); ie->load_error = evas_cache2_image_load_data(ie);
im->tex = evas_gl_common_texture_new(gc, im->im); if (ie->load_error == EVAS_LOAD_ERROR_NONE)
im->tex = evas_gl_common_texture_new(gc, im->im);
evas_cache2_image_unload_data(ie); evas_cache2_image_unload_data(ie);
} }
else else
#endif #endif
{ {
evas_cache_image_load_data(ie); ie->load_error = evas_cache_image_load_data(ie);
im->tex = evas_gl_common_texture_new(gc, im->im); if (ie->load_error == EVAS_LOAD_ERROR_NONE)
im->tex = evas_gl_common_texture_new(gc, im->im);
evas_cache_image_unload_data(ie); evas_cache_image_unload_data(ie);
} }
} }
@ -844,14 +849,16 @@ evas_gl_common_image_update(Evas_Engine_GL_Context *gc, Evas_GL_Image *im)
case EVAS_COLORSPACE_ETC1_ALPHA: case EVAS_COLORSPACE_ETC1_ALPHA:
if ((im->tex) && (im->dirty)) if ((im->tex) && (im->dirty))
{ {
evas_cache_image_load_data(ie); ie->load_error = evas_cache_image_load_data(ie);
evas_gl_common_texture_rgb_a_pair_update(im->tex, im->im); if (ie->load_error == EVAS_LOAD_ERROR_NONE)
evas_gl_common_texture_rgb_a_pair_update(im->tex, im->im);
evas_cache_image_unload_data(ie); evas_cache_image_unload_data(ie);
} }
else if ((!im->tex)) else if ((!im->tex) && (ie->load_error == EVAS_LOAD_ERROR_NONE))
{ {
evas_cache_image_load_data(ie); ie->load_error = evas_cache_image_load_data(ie);
im->tex = evas_gl_common_texture_rgb_a_pair_new(gc, im->im); if (ie->load_error == EVAS_LOAD_ERROR_NONE)
im->tex = evas_gl_common_texture_rgb_a_pair_new(gc, im->im);
evas_cache_image_unload_data(ie); evas_cache_image_unload_data(ie);
} }
im->dirty = 0; im->dirty = 0;