From 9dcca83a08045c627c1f8ac61c1636472de68814 Mon Sep 17 00:00:00 2001 From: Carsten Haitzler Date: Sun, 21 Feb 2010 15:49:44 +0000 Subject: [PATCH] fix alpha set/unset on image obj in gl engine. SVN revision: 46344 --- .../engines/gl_common/evas_gl_common.h | 1 + .../modules/engines/gl_common/evas_gl_image.c | 24 ++++++++++++++++--- .../src/modules/engines/gl_x11/evas_engine.c | 5 ++-- 3 files changed, 25 insertions(+), 5 deletions(-) diff --git a/legacy/evas/src/modules/engines/gl_common/evas_gl_common.h b/legacy/evas/src/modules/engines/gl_common/evas_gl_common.h index c87a6db9b1..a82223cd9f 100644 --- a/legacy/evas/src/modules/engines/gl_common/evas_gl_common.h +++ b/legacy/evas/src/modules/engines/gl_common/evas_gl_common.h @@ -341,6 +341,7 @@ Evas_GL_Image *evas_gl_common_image_load(Evas_GL_Context *gc, const char *fil Evas_GL_Image *evas_gl_common_image_new_from_data(Evas_GL_Context *gc, int w, int h, DATA32 *data, int alpha, int cspace); Evas_GL_Image *evas_gl_common_image_new_from_copied_data(Evas_GL_Context *gc, int w, int h, DATA32 *data, int alpha, int cspace); Evas_GL_Image *evas_gl_common_image_new(Evas_GL_Context *gc, int w, int h, int alpha, int cspace); +Evas_GL_Image *evas_gl_common_image_alpha_set(Evas_GL_Image *im, int alpha); void evas_gl_common_image_native_enable(Evas_GL_Image *im); void evas_gl_common_image_native_disable(Evas_GL_Image *im); void evas_gl_common_image_free(Evas_GL_Image *im); diff --git a/legacy/evas/src/modules/engines/gl_common/evas_gl_image.c b/legacy/evas/src/modules/engines/gl_common/evas_gl_image.c index 8833ab3658..ef5d416927 100644 --- a/legacy/evas/src/modules/engines/gl_common/evas_gl_image.c +++ b/legacy/evas/src/modules/engines/gl_common/evas_gl_image.c @@ -174,6 +174,24 @@ evas_gl_common_image_new(Evas_GL_Context *gc, int w, int h, int alpha, int cspac return im; } +Evas_GL_Image * +evas_gl_common_image_alpha_set(Evas_GL_Image *im, int alpha) +{ + if (!im) return NULL; + if (im->alpha == alpha) return im; + im->alpha = alpha; + if (!im->im) return im; + im->im->cache_entry.flags.alpha = alpha ? 1 : 0; + if (im->tex) + { + evas_gl_common_texture_free(im->tex); + im->tex = NULL; + } + if (!im->tex) + im->tex = evas_gl_common_texture_new(im->gc, im->im); + return im; +} + void evas_gl_common_image_native_enable(Evas_GL_Image *im) { @@ -224,6 +242,8 @@ evas_gl_common_image_native_disable(Evas_GL_Image *im) im->cs.space = EVAS_COLORSPACE_ARGB8888; evas_cache_image_colorspace(&im->im->cache_entry, im->cs.space); im->im = (RGBA_Image *)evas_cache_image_size_set(&im->im->cache_entry, im->w, im->h); + if (!im->tex) + im->tex = evas_gl_common_texture_new(im->gc, im->im); } void @@ -308,9 +328,7 @@ _evas_gl_common_image_update(Evas_GL_Context *gc, Evas_GL_Image *im) case EVAS_COLORSPACE_ARGB8888: evas_cache_image_load_data(&im->im->cache_entry); if ((im->tex) && (im->dirty)) - { - evas_gl_common_texture_update(im->tex, im->im); - } + evas_gl_common_texture_update(im->tex, im->im); if (!im->tex) im->tex = evas_gl_common_texture_new(gc, im->im); im->dirty = 0; diff --git a/legacy/evas/src/modules/engines/gl_x11/evas_engine.c b/legacy/evas/src/modules/engines/gl_x11/evas_engine.c index 2bda63311d..b7fbb764de 100644 --- a/legacy/evas/src/modules/engines/gl_x11/evas_engine.c +++ b/legacy/evas/src/modules/engines/gl_x11/evas_engine.c @@ -999,8 +999,9 @@ eng_image_alpha_set(void *data, void *image, int has_alpha) } else evas_gl_common_image_dirty(im, 0, 0, 0, 0); - im->im->cache_entry.flags.alpha = has_alpha ? 1 : 0; - return image; + return evas_gl_common_image_alpha_set(im, has_alpha ? 1 : 0); +// im->im->cache_entry.flags.alpha = has_alpha ? 1 : 0; +// return image; } static void *