Enlightenment CVS committal

Author  : raster
Project : e17
Module  : libs/evas

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


Modified Files:
        evas_gl_common.h evas_gl_context.c evas_gl_image.c 
        evas_gl_texture.c 


Log Message:


1. gustavo';s fuzzy rect implementation for updates. fixed so del's work,
tuned for best performance on my core2 duo desktop - for now. will check
more. also make the yuv colorspace code be a bit more robust and fix leak in
gl engine with shaders.

===================================================================
RCS file: /cvs/e/e17/libs/evas/src/modules/engines/gl_common/evas_gl_common.h,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -3 -r1.11 -r1.12
--- evas_gl_common.h    16 Apr 2007 02:01:11 -0000      1.11
+++ evas_gl_common.h    2 Jun 2007 15:30:58 -0000       1.12
@@ -86,6 +86,10 @@
    Evas_List      *tex_pool;
 
    RGBA_Draw_Context  *dc;
+   
+   struct {
+      GLhandleARB  prog, fshad;
+   } yuv422p;
 };
 
 struct _Evas_GL_Texture
@@ -96,7 +100,6 @@
    int              uw, uh;
 
    GLuint           texture, texture2, texture3;
-   GLhandleARB      prog;
 
    unsigned char    smooth : 1;
    unsigned char    changed : 1;
@@ -106,6 +109,7 @@
    unsigned char    opt : 1;
 
    int              references;
+   GLhandleARB      prog;
 };
 
 struct _Evas_GL_Image
===================================================================
RCS file: /cvs/e/e17/libs/evas/src/modules/engines/gl_common/evas_gl_context.c,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -3 -r1.8 -r1.9
--- evas_gl_context.c   2 Jan 2007 02:43:11 -0000       1.8
+++ evas_gl_context.c   2 Jun 2007 15:30:58 -0000       1.9
@@ -39,6 +39,41 @@
    gc->change.clip    = 1;
    gc->change.buf     = 1;
    gc->change.other   = 1;
+   
+   gc->yuv422p.prog = glCreateProgramObjectARB();
+// on an nv 6600gt this is fast - but on a 5500fx its DEAD SLOW!!!!!   
+// if (!gc->ext.arb_texture_non_power_of_two) return NULL;
+   /* BEGIN LEAK */
+   gc->yuv422p.fshad = glCreateShaderObjectARB(GL_FRAGMENT_SHADER_ARB);
+     {
+       const char *code =
+         "uniform sampler2D ytex, utex, vtex;\n"
+         "void main(void) {\n"
+         "  float r, g, b, y, u, v;\n"
+         "  y = texture2D(ytex, gl_TexCoord[0].st).r;\n"
+         "  u = texture2D(utex, gl_TexCoord[0].st).r;\n"
+         "  v = texture2D(vtex, gl_TexCoord[0].st).r;\n"
+         "  y = (y - 0.0625) * 1.164;\n"
+         "  u = u - 0.5;\n"
+         "  v = v - 0.5;\n"
+         "  r = y + (1.402   * v);\n"
+         "  g = y - (0.34414 * u) - (0.71414 * v);\n"
+         "  b = y + (1.772   * u);\n"
+         "  gl_FragColor = vec4(r * gl_Color.r * gl_Color.a, g * gl_Color.g * 
gl_Color.a, b * gl_Color.b * gl_Color.a, gl_Color.a);\n"
+         "}\n";
+       glShaderSourceARB(gc->yuv422p.fshad, 1, &code, NULL);
+     }
+   glCompileShaderARB(gc->yuv422p.fshad);
+   glAttachObjectARB(gc->yuv422p.prog, gc->yuv422p.fshad);
+   /* END LEAK - something in the above leaks... beats me what. */
+   glLinkProgramARB(gc->yuv422p.prog);
+   
+   glUseProgramObjectARB(gc->yuv422p.prog);
+   glUniform1iARB(glGetUniformLocationARB(gc->yuv422p.prog, "ytex"), 0);
+   glUniform1iARB(glGetUniformLocationARB(gc->yuv422p.prog, "utex"), 1);
+   glUniform1iARB(glGetUniformLocationARB(gc->yuv422p.prog, "vtex"), 2);
+   glUseProgramObjectARB(0);
+   
    return gc;
 }
 
@@ -47,7 +82,15 @@
 {
    gc->references--;
    if (gc->references > 0) return;
-
+   if (gc->yuv422p.fshad)
+     {
+       glDeleteObjectARB(gc->yuv422p.fshad);
+     }
+   if (gc->yuv422p.prog)
+     {
+       glDeleteObjectARB(gc->yuv422p.prog);
+     }
+   
    if (gc == _evas_gl_common_context) _evas_gl_common_context = NULL;
    free(gc);
 }
===================================================================
RCS file: /cvs/e/e17/libs/evas/src/modules/engines/gl_common/evas_gl_image.c,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -3 -r1.7 -r1.8
--- evas_gl_image.c     4 Mar 2007 16:18:06 -0000       1.7
+++ evas_gl_image.c     2 Jun 2007 15:30:58 -0000       1.8
@@ -105,6 +105,7 @@
     im->cached = 1;
     gc->images = evas_list_prepend(gc->images, im);
     */
+   printf("new im cs = %i\n", im->cs.space);
    return im;
 }
 
@@ -166,6 +167,33 @@
        free(im);
        return NULL;
      }
+   im->gc = gc;
+   im->cs.space = cspace;
+   if (alpha)
+     im->im->flags |= RGBA_IMAGE_HAS_ALPHA;
+   else
+     im->im->flags &= ~RGBA_IMAGE_HAS_ALPHA;
+   switch (cspace)
+     {
+      case EVAS_COLORSPACE_ARGB8888:
+//     if (data)
+//       memcpy(im->im->image->data, data, w * h * sizeof(DATA32));
+       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;
+       im->cs.no_free = 0;
+        im->cs.data = calloc(1, im->im->image->h * sizeof(unsigned char *) * 
2);
+//        if ((data) && (im->cs.data))
+//       memcpy(im->cs.data, data, im->im->image->h * sizeof(unsigned char *) 
* 2);
+       break;
+      default:
+       abort();
+       break;
+     }
    return im;
 }
 
@@ -215,6 +243,7 @@
        r = g = b = a = 255;
      }
    evas_common_load_image_data_from_file(im->im);
+/* leak in this switch */
    switch (im->cs.space)
      {
       case EVAS_COLORSPACE_ARGB8888:
@@ -251,7 +280,9 @@
             im->dirty = 0;
          }
        if ((!im->tex) && (im->cs.data) && (*((unsigned char **)im->cs.data)))
-         im->tex = evas_gl_common_ycbcr601pl_texture_new(gc, im->cs.data, 
im->im->image->w, im->im->image->h, smooth);
+         {
+            im->tex = evas_gl_common_ycbcr601pl_texture_new(gc, im->cs.data, 
im->im->image->w, im->im->image->h, smooth);
+         }
        if (!im->tex) return;
        ow = (dw * im->tex->tw) / sw;
        oh = (dh * im->tex->th) / sh;
@@ -270,11 +301,13 @@
             ty2 = (double)(sy + sh) / (double)(im->tex->h);
          }
        evas_gl_common_context_texture_set(gc, im->tex, smooth, ow, oh);
+
        break;
       default:
        abort();
        break;
     }
+
 //   if ((!im->tex->have_mipmaps) && (smooth) &&
 //       ((im->tex->uw < im->tex->tw) || (im->tex->uh < im->tex->th)) &&
 //       (!gc->ext.sgis_generate_mipmap))
===================================================================
RCS file: /cvs/e/e17/libs/evas/src/modules/engines/gl_common/evas_gl_texture.c,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -3 -r1.8 -r1.9
--- evas_gl_texture.c   2 Jan 2007 02:43:11 -0000       1.8
+++ evas_gl_texture.c   2 Jun 2007 15:30:58 -0000       1.9
@@ -296,8 +296,16 @@
    glDeleteTextures(1, &tex->texture);
    if (tex->texture2) glDeleteTextures(1, &tex->texture2);
    if (tex->texture3) glDeleteTextures(1, &tex->texture3);
+/*   
+   if (tex->fshad)
+     {
+       glDeleteObjectARB(tex->fshad);
+     }
    if (tex->prog)
-     glDeleteObjectARB(tex->prog);
+     {
+       glDeleteObjectARB(tex->prog);
+     }
+ */
    free(tex);
 }
 
@@ -418,7 +426,6 @@
    Evas_GL_Texture *tex;
    int im_w, im_h, tw, th, y;
    GLenum texfmt;
-   GLhandleARB fshad;
   
 // on an nv 6600gt this is fast - but on a 5500fx its DEAD SLOW!!!!!   
 //   if (!gc->ext.arb_texture_non_power_of_two) return NULL;
@@ -436,40 +443,13 @@
    tex->references = 0;
    tex->smooth = 0;
    tex->changed = 1;
-   
-   tex->prog = glCreateProgramObjectARB();
-   fshad = glCreateShaderObjectARB(GL_FRAGMENT_SHADER_ARB);
 
-     {
-       const char *code =
-         "uniform sampler2D ytex, utex, vtex;\n"
-         "void main(void) {\n"
-         "  float r, g, b, y, u, v;\n"
-         "  y = texture2D(ytex, gl_TexCoord[0].st).r;\n"
-         "  u = texture2D(utex, gl_TexCoord[0].st).r;\n"
-         "  v = texture2D(vtex, gl_TexCoord[0].st).r;\n"
-         "  y = (y - 0.0625) * 1.164;\n"
-         "  u = u - 0.5;\n"
-         "  v = v - 0.5;\n"
-         "  r = y + (1.402   * v);\n"
-         "  g = y - (0.34414 * u) - (0.71414 * v);\n"
-         "  b = y + (1.772   * u);\n"
-         "  gl_FragColor = vec4(r * gl_Color.r * gl_Color.a, g * gl_Color.g * 
gl_Color.a, b * gl_Color.b * gl_Color.a, gl_Color.a);\n"
-         "}\n";
-       glShaderSourceARB(fshad, 1, &code, NULL);
-     }
-   
-   glCompileShaderARB(fshad);
-   glAttachObjectARB(tex->prog, fshad);
-   glLinkProgramARB(tex->prog);
+   tex->prog = gc->yuv422p.prog;
    
    glEnable(GL_TEXTURE_2D);
    texfmt = GL_LUMINANCE;
 
    glUseProgramObjectARB(tex->prog);
-   glUniform1iARB(glGetUniformLocationARB(tex->prog, "ytex"), 0);
-   glUniform1iARB(glGetUniformLocationARB(tex->prog, "utex"), 1);
-   glUniform1iARB(glGetUniformLocationARB(tex->prog, "vtex"), 2);
    
    glGenTextures(1, &(tex->texture));
    glBindTexture(GL_TEXTURE_2D, tex->texture);



-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take
control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/
_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to