if image biger than max texture size... report allocation errors.

SVN revision: 64241
This commit is contained in:
Carsten Haitzler 2011-10-21 06:10:15 +00:00
parent 4587fbb802
commit f63b1d9ecd
1 changed files with 26 additions and 1 deletions

View File

@ -105,6 +105,14 @@ evas_gl_common_image_load(Evas_Engine_GL_Context *gc, const char *file, const ch
im_im = evas_common_load_image_from_file(file, key, lo, error);
if (!im_im) return NULL;
if ((im_im->cache_entry.w > gc->shared->info.max_texture_size) ||
(im_im->cache_entry.h > gc->shared->info.max_texture_size))
{
evas_cache_image_drop(&(im_im->cache_entry));
*error = EVAS_LOAD_ERROR_RESOURCE_ALLOCATION_FAILED;
return NULL;
}
// FIXME: keep unreffed shared images around
EINA_LIST_FOREACH(gc->shared->images, l, im)
@ -113,7 +121,7 @@ evas_gl_common_image_load(Evas_Engine_GL_Context *gc, const char *file, const ch
{
// why did i put this here? i think to free the rgba pixel data once a texture
// exists.
// evas_cache_image_drop(&im_im->cache_entry);
// evas_cache_image_drop(&(im_im->cache_entry));
gc->shared->images = eina_list_remove_list(gc->shared->images, l);
gc->shared->images = eina_list_prepend(gc->shared->images, im);
evas_gl_common_image_ref(im);
@ -125,6 +133,7 @@ evas_gl_common_image_load(Evas_Engine_GL_Context *gc, const char *file, const ch
im = calloc(1, sizeof(Evas_GL_Image));
if (!im)
{
evas_cache_image_drop(&(im_im->cache_entry));
*error = EVAS_LOAD_ERROR_RESOURCE_ALLOCATION_FAILED;
return NULL;
}
@ -147,6 +156,10 @@ evas_gl_common_image_new_from_data(Evas_Engine_GL_Context *gc, unsigned int w, u
Evas_GL_Image *im;
Eina_List *l;
if ((w > gc->shared->info.max_texture_size) ||
(h > gc->shared->info.max_texture_size))
return NULL;
if (data)
{
EINA_LIST_FOREACH(gc->shared->images, l, im)
@ -200,6 +213,10 @@ evas_gl_common_image_new_from_copied_data(Evas_Engine_GL_Context *gc, unsigned i
{
Evas_GL_Image *im;
if ((w > gc->shared->info.max_texture_size) ||
(h > gc->shared->info.max_texture_size))
return NULL;
im = calloc(1, sizeof(Evas_GL_Image));
if (!im) return NULL;
im->references = 1;
@ -241,6 +258,10 @@ evas_gl_common_image_new(Evas_Engine_GL_Context *gc, unsigned int w, unsigned in
{
Evas_GL_Image *im;
if ((w > gc->shared->info.max_texture_size) ||
(h > gc->shared->info.max_texture_size))
return NULL;
im = calloc(1, sizeof(Evas_GL_Image));
if (!im) return NULL;
im->references = 1;
@ -475,6 +496,10 @@ evas_gl_common_image_surface_new(Evas_Engine_GL_Context *gc, unsigned int w, uns
{
Evas_GL_Image *im;
if ((w > gc->shared->info.max_texture_size) ||
(h > gc->shared->info.max_texture_size))
return NULL;
im = calloc(1, sizeof(Evas_GL_Image));
if (!im) return NULL;
im->references = 1;