fix alpha set/unset on image obj in gl engine.
authorraster <raster@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Sun, 21 Feb 2010 15:49:44 +0000 (15:49 +0000)
committerraster <raster@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Sun, 21 Feb 2010 15:49:44 +0000 (15:49 +0000)
git-svn-id: svn+ssh://svn.enlightenment.org/var/svn/e/trunk/evas@46344 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33

src/modules/engines/gl_common/evas_gl_common.h
src/modules/engines/gl_common/evas_gl_image.c
src/modules/engines/gl_x11/evas_engine.c

index c87a6db..a82223c 100644 (file)
@@ -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);
index 8833ab3..ef5d416 100644 (file)
@@ -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;
index 2bda633..b7fbb76 100644 (file)
@@ -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 *