Enlightenment CVS committal

Author  : raster
Project : e17
Module  : libs/evas

Dir     : e17/libs/evas/src/modules/engines/gl_x11


Modified Files:
        evas_engine.c 


Log Message:


not complete yet - actually i need help with the fragment shader.

in evas_gl_texture.c i have a frag shader, and it tries to use a set of 3
textures that act as the yuv planes, BUT the u and v textures (Utex and Vtex)
are simply getting values from the Ytex - regardless of what i try. grrr.
what's up with that?

===================================================================
RCS file: /cvs/e/e17/libs/evas/src/modules/engines/gl_x11/evas_engine.c,v
retrieving revision 1.17
retrieving revision 1.18
diff -u -3 -r1.17 -r1.18
--- evas_engine.c       9 Dec 2006 08:52:08 -0000       1.17
+++ evas_engine.c       17 Dec 2006 15:48:51 -0000      1.18
@@ -457,6 +457,161 @@
    evas_gl_common_gradient_draw(re->win->gl_context, gradient, x, y, w, h);
 }
 
+static int
+eng_image_alpha_get(void *data, void *image)
+{
+   Render_Engine *re;
+   Evas_GL_Image *im;
+
+   re = (Render_Engine *)data;
+   im = image;
+   /* FIXME: can move to gl_common */
+   switch (im->cs.space)
+     {
+      case EVAS_COLORSPACE_ARGB8888:
+       if (im->im->flags & RGBA_IMAGE_HAS_ALPHA) return 1;
+      default:
+       break;
+     }
+   return 0;
+}
+
+static int
+eng_image_colorspace_get(void *data, void *image)
+{
+   Render_Engine *re;
+   Evas_GL_Image *im;
+   
+   re = (Render_Engine *)data;
+   im = image;
+   return im->cs.space;
+}
+
+static void *
+eng_image_alpha_set(void *data, void *image, int has_alpha)
+{
+   Render_Engine *re;
+   Evas_GL_Image *im;
+
+   re = (Render_Engine *)data;
+   eng_window_use(re->win);
+   im = image;
+   /* FIXME: can move to gl_common */
+   if (im->cs.space != EVAS_COLORSPACE_ARGB8888) return im;
+   if ((has_alpha) && (im->im->flags & RGBA_IMAGE_HAS_ALPHA)) return image;
+   else if ((!has_alpha) && (!(im->im->flags & RGBA_IMAGE_HAS_ALPHA))) return 
image;
+   if (im->references > 1)
+    {
+       Evas_GL_Image *im_new;
+
+       im_new = evas_gl_common_image_new_from_copied_data(im->gc, 
im->im->image->w, im->im->image->h, im->im->image->data,
+                                                          
eng_image_alpha_get(data, image),
+                                                          
eng_image_colorspace_get(data, image));
+       if (!im_new) return im;
+       evas_gl_common_image_free(im);
+       im = im_new;
+     }
+   else
+     evas_gl_common_image_dirty(im);
+   if (has_alpha)
+     im->im->flags |= RGBA_IMAGE_HAS_ALPHA;
+   else
+     im->im->flags &= ~RGBA_IMAGE_HAS_ALPHA;
+   return image;
+}
+
+static void *
+eng_image_border_set(void *data, void *image, int l, int r, int t, int b)
+{
+   Render_Engine *re;
+
+   re = (Render_Engine *)data;
+   return image;
+}
+
+static void
+eng_image_border_get(void *data, void *image, int *l, int *r, int *t, int *b)
+{
+   Render_Engine *re;
+
+   re = (Render_Engine *)data;
+}
+
+static char *
+eng_image_comment_get(void *data, void *image, char *key)
+{
+   Render_Engine *re;
+   Evas_GL_Image *im;
+
+   re = (Render_Engine *)data;
+   im = image;
+   return im->im->info.comment;
+}
+
+static char *
+eng_image_format_get(void *data, void *image)
+{
+   Render_Engine *re;
+   Evas_GL_Image *im;
+
+   re = (Render_Engine *)data;
+   im = image;
+   return NULL;
+}
+
+static void
+eng_image_colorspace_set(void *data, void *image, int cspace)
+{
+   Render_Engine *re;
+   Evas_GL_Image *im;
+   
+   re = (Render_Engine *)data;
+   im = image;
+   /* FIXME: can move to gl_common */
+   if (im->cs.space == cspace) return;
+   switch (cspace)
+     {
+      case EVAS_COLORSPACE_ARGB8888:
+       if (im->cs.data)
+         {
+            if (!im->cs.no_free) free(im->cs.data);
+            im->cs.data = NULL;
+            im->cs.no_free = 0;
+         }
+       if (!im->im->image->no_free)
+         evas_common_image_surface_alloc(im->im->image);
+       break;
+      case EVAS_COLORSPACE_YCBCR422P601_PL:
+      case EVAS_COLORSPACE_YCBCR422P709_PL:
+       evas_common_image_surface_dealloc(im->im->image);
+       im->im->image->data = NULL;
+       if (im->tex) evas_gl_common_texture_free(im->tex);
+       im->tex = NULL;
+       if (im->cs.data)
+         {
+            if (!im->cs.no_free) free(im->cs.data);
+         }
+       im->cs.data = calloc(1, im->im->image->h * sizeof(unsigned char *) * 2);
+       im->cs.no_free = 0;
+       break;
+      default:
+       abort();
+       break;
+     }
+   im->cs.space = cspace;
+}
+
+static void
+eng_image_native_set(void *data, void *image, void *native)
+{
+}
+
+static void *
+eng_image_native_get(void *data, void *image)
+{
+   return NULL;
+}
+
 static void *
 eng_image_load(void *data, char *file, char *key, int *error, 
Evas_Image_Load_Opts *lo)
 {
@@ -469,23 +624,23 @@
 }
 
 static void *
-eng_image_new_from_data(void *data, int w, int h, DATA32 *image_data)
+eng_image_new_from_data(void *data, int w, int h, DATA32 *image_data, int 
alpha, int cspace)
 {
    Render_Engine *re;
 
    re = (Render_Engine *)data;
    eng_window_use(re->win);
-   return evas_gl_common_image_new_from_data(re->win->gl_context, w, h, 
image_data);
+   return evas_gl_common_image_new_from_data(re->win->gl_context, w, h, 
image_data, alpha, cspace);
 }
 
 static void *
-eng_image_new_from_copied_data(void *data, int w, int h, DATA32 *image_data)
+eng_image_new_from_copied_data(void *data, int w, int h, DATA32 *image_data, 
int alpha, int cspace)
 {
    Render_Engine *re;
 
    re = (Render_Engine *)data;
    eng_window_use(re->win);
-   return evas_gl_common_image_new_from_copied_data(re->win->gl_context, w, h, 
image_data);
+   return evas_gl_common_image_new_from_copied_data(re->win->gl_context, w, h, 
image_data, alpha, cspace);
 }
 
 static void
@@ -520,17 +675,23 @@
    im_old = image;
    if ((im_old) && (im_old->im->image->w == w) && (im_old->im->image->h == h))
      return image;
-   im = evas_gl_common_image_new(re->win->gl_context, w, h);
    if (im_old)
      {
+       im = evas_gl_common_image_new(re->win->gl_context, w, h, 
+                                     eng_image_alpha_get(data, image),
+                                     eng_image_colorspace_get(data, image));
+/*     
        evas_common_load_image_data_from_file(im_old->im);
        if (im_old->im->image->data)
          {
             evas_common_blit_rectangle(im_old->im, im->im, 0, 0, w, h, 0, 0);
             evas_common_cpu_end_opt();
          }
+ */
        evas_gl_common_image_free(im_old);
      }
+   else
+     im = evas_gl_common_image_new(re->win->gl_context, w, h, 1, 
EVAS_COLORSPACE_ARGB8888);
    return im;
 }
 
@@ -554,24 +715,38 @@
    im = image;
    eng_window_use(re->win);
    evas_common_load_image_data_from_file(im->im);
-   if (to_write)
+   switch (im->cs.space)
      {
-       if (im->references > 1)
+      case EVAS_COLORSPACE_ARGB8888:
+       if (to_write)
          {
-            Evas_GL_Image *im_new;
-
-            im_new = evas_gl_common_image_new_from_copied_data(im->gc, 
im->im->image->w, im->im->image->h, im->im->image->data);
-            if (!im_new)
+            if (im->references > 1)
               {
-                 return im;
-                 *image_data = NULL;
+                 Evas_GL_Image *im_new;
+                 
+                 im_new = evas_gl_common_image_new_from_copied_data(im->gc, 
im->im->image->w, im->im->image->h, im->im->image->data,
+                                                                    
eng_image_alpha_get(data, image),
+                                                                    
eng_image_colorspace_get(data, image));
+                 if (!im_new)
+                   {
+                      return im;
+                      *image_data = NULL;
+                   }
+                 im = im_new;
               }
-            im = im_new;
+            else
+              evas_gl_common_image_dirty(im);
          }
-       else
-         evas_gl_common_image_dirty(im);
+       *image_data = im->im->image->data;
+       break;
+      case EVAS_COLORSPACE_YCBCR422P601_PL:
+      case EVAS_COLORSPACE_YCBCR422P709_PL:
+       *image_data = im->cs.data;
+       break;
+      default:
+       abort();
+       break;
      }
-   *image_data = im->im->image->data;
    return im;
 }
 
@@ -584,79 +759,41 @@
    re = (Render_Engine *)data;
    im = image;
    eng_window_use(re->win);
-   if (image_data != im->im->image->data)
+   switch (im->cs.space)
      {
-       int w, h;
-
-       w = im->im->image->w;
-       h = im->im->image->h;
-       evas_gl_common_image_free(im);
-       return eng_image_new_from_data(data, w, h, image_data);
+      case EVAS_COLORSPACE_ARGB8888:
+       if (image_data != im->im->image->data)
+         {
+            int w, h;
+            
+            w = im->im->image->w;
+            h = im->im->image->h;
+            evas_gl_common_image_free(im);
+            return eng_image_new_from_data(data, w, h, image_data,
+                                           eng_image_alpha_get(data, image),
+                                           eng_image_colorspace_get(data, 
image));
+         }
+        break;
+      case EVAS_COLORSPACE_YCBCR422P601_PL:
+      case EVAS_COLORSPACE_YCBCR422P709_PL:
+        if (image_data != im->cs.data)
+         {
+            if (im->cs.data)
+              {
+                 if (!im->cs.no_free) free(im->cs.data);
+              }
+            im->cs.data = image_data;
+         }
+       break;
+      default:
+       abort();
+       break;
      }
    /* hmmm - but if we wrote... why bother? */
    evas_gl_common_image_dirty(im);
    return im;
 }
 
-static void *
-eng_image_alpha_set(void *data, void *image, int has_alpha)
-{
-   Render_Engine *re;
-   Evas_GL_Image *im;
-
-   re = (Render_Engine *)data;
-   eng_window_use(re->win);
-   im = image;
-   if ((has_alpha) && (im->im->flags & RGBA_IMAGE_HAS_ALPHA)) return image;
-   else if ((!has_alpha) && (!(im->im->flags & RGBA_IMAGE_HAS_ALPHA))) return 
image;
-   if (im->references > 1)
-     {
-       Evas_GL_Image *im_new;
-
-       im_new = evas_gl_common_image_new_from_copied_data(im->gc, 
im->im->image->w, im->im->image->h, im->im->image->data);
-       if (!im_new) return im;
-       evas_gl_common_image_free(im);
-       im = im_new;
-     }
-   else
-     evas_gl_common_image_dirty(im);
-   if (has_alpha)
-     im->im->flags |= RGBA_IMAGE_HAS_ALPHA;
-   else
-     im->im->flags &= ~RGBA_IMAGE_HAS_ALPHA;
-   return image;
-}
-
-static int
-eng_image_alpha_get(void *data, void *image)
-{
-   Render_Engine *re;
-   Evas_GL_Image *im;
-
-   re = (Render_Engine *)data;
-   im = image;
-   eng_window_use(re->win);
-   if (im->im->flags & RGBA_IMAGE_HAS_ALPHA) return 1;
-   return 0;
-}
-
-static void *
-eng_image_border_set(void *data, void *image, int l, int r, int t, int b)
-{
-   Render_Engine *re;
-
-   re = (Render_Engine *)data;
-   return image;
-}
-
-static void
-eng_image_border_get(void *data, void *image, int *l, int *r, int *t, int *b)
-{
-   Render_Engine *re;
-
-   re = (Render_Engine *)data;
-}
-
 static void
 eng_image_draw(void *data, void *context, void *surface, void *image, int 
src_x, int src_y, int src_w, int src_h, int dst_x, int dst_y, int dst_w, int 
dst_h, int smooth)
 {
@@ -669,50 +806,6 @@
                             src_x, src_y, src_w, src_h,
                             dst_x, dst_y, dst_w, dst_h,
                             smooth);
-}
-
-static char *
-eng_image_comment_get(void *data, void *image, char *key)
-{
-   Render_Engine *re;
-   Evas_GL_Image *im;
-
-   re = (Render_Engine *)data;
-   im = image;
-   return im->im->info.comment;
-}
-
-static char *
-eng_image_format_get(void *data, void *image)
-{
-   Render_Engine *re;
-   Evas_GL_Image *im;
-
-   re = (Render_Engine *)data;
-   im = image;
-   return NULL;
-}
-
-static void
-eng_image_colorspace_set(void *data, void *image, int cspace)
-{
-}
-
-static int
-eng_image_colorspace_get(void *data, void *image)
-{
-   return EVAS_COLORSPACE_ARGB8888;
-}
-
-static void
-eng_image_native_set(void *data, void *image, void *native)
-{
-}
-
-static void *
-eng_image_native_get(void *data, void *image)
-{
-   return NULL;
 }
 
 static void



-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys - and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to