On Wed, 24 Mar 2004 06:32:09 -0500 Jose O Gonzalez <[EMAIL PROTECTED]> babbled:

eek - ok - looking into patch. i have a problem.... because you included it in
yout mail it has been line-wrapped and mangled and its too big to "unmangle" can
you send a patch again as an attachment? that'd be great! :)

> 
> > > >         1)  Replace the current formula for the new destination
> > > > alpha (when blending to rgba) by the formula
> > > >                 BLEND_COLOR(a, A_VAL(dst), 255, A_VAL(dst), tmp)
> > > > where "a" is the relevant alpha value.
> > > 
> > > i tried this and tested it - it is, in fact, wrong :( sorry - the 
> > > math doesn't
> > > work you as you want it to - i actually tested it and the results 
> > > were - well
> > > catastrophically bad in terms of rendering display :( i can't put 
> > > this in :(
> > 
> >     That's odd... I'll see if I can take a look at it in more detail
> > and figure out what's happenning...
> 
> 
>       Well, it has taken some time to look into this as it
> took me further into things than I'd initially expected ...
> But I believe that I've found the problem -- it's actually still
> lurking there in the code recently committed to CVS.
> 
> 
>       I found it very odd that you observed such "catastrophic"
> results because the difference in the computed alpha values
> from using the blend-macro vs using the current formula is at
> most 1, and both give 0 iff the input values are 0.
> 
>       Nevertheless, I thought perhaps an accuracy issue was
> involved and so took a look at the question of "dividing by 255".
>       I will omit details here, but essentially I found the
> following:
> 
>     1)
>       Let's call the "c-ideal", or best approx for color-blending,
> the formula:
> 
>       DATA8  nc1 = 0.5 + c1 + (((c0 - c1) * a0) / 255.0);
> 
> for given input DATA8 a0, c0, c1;
> 
>       It turns out that this can be evaluated using integer
> arithmetic by:
> 
>       DATA32 tmp = (255 * c1) + ((c0 - c1) * a0) + 0x80;
>       DATA8  nc1 = (tmp + (tmp >> 8)) >> 8;
> 
>       If it's any faster, one can rewrite the first statement as:
> 
>       DATA32 tmp = ((c1 << 8) - c1) + ((c0 - c1) * a0) + 0x80;
> 
> 
>     2)
>       Let's call the "a-ideal", or best approx for alpha-blending,
> the formula:
> 
>       DATA8  na1 = 0.5 + a1 + (((255 - a1) * a0) / 255.0);
> 
> for given input DATA8 a0, a1;
> 
>       This too can be evaluated using integer arithmetic by:
> 
>       DATA32 tmp = ((255 - a1) * a0) + 0x80;
>       DATA8  na1 = a1 + ((tmp + (tmp >> 8)) >> 8);
> 
> ----------------------------------------------------------------
> 
>       We may compare the currently used blend-macro formulas
> with the "c-ideal" for color-blending, and we find that it differs
> from it for 1,938 cases.
> 
>       For alpha-blending, using the blend-macro (as proposed
> in the patches) differs from the "a-ideal" for only 24 cases,
> whereas the formula a1 + (((255 - a1) * a0) / 255) that is
> currently used, differs from the "a-ideal" for 21,770 cases.
> 
>       Now, from the formulas for all of these, it is
> clear that for both the color and alpha components, the
> computed values from any of these differ by at most 1,
> ie. the absolute value of their difference is 0 or 1.
>       Also, the computed alpha value na1, is 0 iff
> a1 = a0 = 0, for all of these.
> 
>       From these facts, one would expect that, visually,
> the difference between using any of these would be difficult
> to notice, with say one or two blendings, for most common
> types of images.
> 
> ----------------------------------------------------------------
> 
>       Now, to the heart of the matter:
> 
>       I wrote functions for doing rgba to rgba blending
> with the following five different methods:
> 
> --------
>     A)
>       For the color components:  the int-arith formula in 1)
> for the "c-ideal".
>       For the alpha component:  the int-arith formula in 2)
> for the "a-ideal".
> 
>       This is the "ideal".
> --------
>     B)
>       For the color components:  the current blend-macro.
> 
>       For the alpha component:  the int-arith formula in 2)
> for the "a-ideal".
> --------      
>     C)
>       For the color components:  the current blend-macro.
> 
>       For the alpha component:  the current blend-macro used
> to compute alpha (as in the patches).
> 
>       So this corresponds to what was in the Evas patches
> (and in the Imlib2 patches as well).
> --------
>     D)
>       For the color components:  the current blend-macro.
> 
>       For the alpha component:  the formula
>               a1 + (((255 - a1) * a0) / 255)
> 
>       ie. The current blending function in CVS.
> --------
>     E)
>       For the color components:  the formula
>               c1 + (((c0 - c1) * a0) / 255)
>       For the alpha component:  the formula
>               a1 + (((255 - a1) * a0) / 255)
> 
>       This one just for completeness.
> --------------------------------------------------------
> 
> 
>       I ran a variety of tests using each of the above,
> blending a variety of images (with alpha) together 2^n
> times, for n = 0 to 8, in various associative combinations,
> from one to 4 layers deep..., and I'll be dammed if I could
> see any significant difference in the results at all, much
> less anything that could be considered as radically different.
> 
>       This led me to believe that you had done something
> wrong in writing down the implementations of the functions,
> I checked the patches I sent and found them ok.
>       I thus took a look at the code recently committed
> to CVS and I believe that I've found the culprit.
> 
>       It seems to be that when you tested this, you wrote
> 
>   BLEND_COLOR(A_VAL(src), A_VAL(dst), 255, A_VAL(dst), tmp)
> 
> because, unfortunately, you are iterating over things called
> src_ptr and dst_ptr, NOT over the input src, dst pointers.
> 
>       You actually still have this in the "evas_blend_
> pixel_cmod_pixel.c" file, but I also found it commented out
> of other files in an earlier commit, I guess when first
> trying to test this suggestion of mine.
> 
>       I'm enclosing *new* patches which hopefully will
> be ok.
>       Please test against the patches and see if you still
> obtain odd results.
> 
>       If you do, then the problem is very, very odd indeed.
> 
>                       jose.
> 
> PS.
>       If it does work, I'd consider increasing the accuracy
> further by using the "a-ideal" described in 2), to compute
> the alpha values; and if it's not much slower, perhaps also
> use the "c-ideal" of 1) to do the color blending -- but I've
> not pursued this in the patches.
> 
> 
> ****************************************************************
> 
> Index:
> e17/libs/evas/src/lib/engines/common/evas_blend_alpha_color_pixel.c
> ===================================================================
> RCS file:
> /cvsroot/enlightenment/e17/libs/evas/src/lib/engines/common/evas_blend_al
> pha_color_pixel.c,v
> retrieving revision 1.5
> diff -u -r1.5 evas_blend_alpha_color_pixel.c
> ---
> e17/libs/evas/src/lib/engines/common/evas_blend_alpha_color_pixel.c   18
> Mar 2004 09:06:11 -0000       1.5
> +++
> e17/libs/evas/src/lib/engines/common/evas_blend_alpha_color_pixel.c   24
> Mar 2004 10:45:29 -0000
> @@ -147,12 +147,10 @@
>     while (dst_ptr < dst_end_ptr)
>       {
>       DATA32 tmp;
> -     DATA8  a;
> -     DATA8 aa;
> +     DATA8  a, aa;
>       
>       aa = (((*src_ptr) + 1) * A_VAL(&col)) >> 8;
> -     a = _evas_pow_lut[aa][A_VAL(dst_ptr)];
> -        switch (a)
> +        switch (aa)
>         {
>          case 0:
>            break;
> @@ -160,6 +158,10 @@
>            *dst_ptr = col;
>            break;
>          default:
> +          a = _evas_pow_lut[aa][A_VAL(dst_ptr)];
> +          BLEND_COLOR(aa, A_VAL(dst_ptr), 
> +                    255, A_VAL(dst_ptr), 
> +                    tmp);
>            BLEND_COLOR(a, R_VAL(dst_ptr), 
>                        R_VAL(&col), R_VAL(dst_ptr), 
>                        tmp);
> @@ -169,7 +171,6 @@
>            BLEND_COLOR(a, B_VAL(dst_ptr), 
>                        B_VAL(&col), B_VAL(dst_ptr), 
>                        tmp);
> -          A_VAL(dst_ptr) = A_VAL(dst_ptr) + ((aa * (255 - A_VAL(dst_ptr))) /
> 255);
>            break;
>         }
>       src_ptr++;
> 
> *************************************************************************
> *******************
> 
> Index: e17/libs/evas/src/lib/engines/common/evas_blend_color_pixel.c
> ===================================================================
> RCS file:
> /cvsroot/enlightenment/e17/libs/evas/src/lib/engines/common/evas_blend_co
> lor_pixel.c,v
> retrieving revision 1.5
> diff -u -r1.5 evas_blend_color_pixel.c
> --- e17/libs/evas/src/lib/engines/common/evas_blend_color_pixel.c     18 Mar
> 2004 09:06:12 -0000   1.5
> +++ e17/libs/evas/src/lib/engines/common/evas_blend_color_pixel.c     24 Mar
> 2004 10:46:47 -0000
> @@ -96,6 +96,9 @@
>       
>       a = _evas_pow_lut[A_VAL(&src)][A_VAL(dst_ptr)];
>       
> +     BLEND_COLOR(A_VAL(&src), A_VAL(dst_ptr), 
> +                 255, A_VAL(dst_ptr), 
> +                 tmp);
>       BLEND_COLOR(a, R_VAL(dst_ptr), 
>                   R_VAL(&src), R_VAL(dst_ptr), 
>                   tmp);
> @@ -105,7 +108,6 @@
>       BLEND_COLOR(a, B_VAL(dst_ptr), 
>                   B_VAL(&src), B_VAL(dst_ptr), 
>                   tmp);       
> -     A_VAL(dst_ptr) = A_VAL(dst_ptr) + ((A_VAL(&src) * (255 -
> A_VAL(dst_ptr))) / 255);
>       
>       dst_ptr++;
>       }
> 
> *************************************************************************
> ************************
> 
> Index: e17/libs/evas/src/lib/engines/common/evas_blend_pixel_pixel.c
> ===================================================================
> RCS file:
> /cvsroot/enlightenment/e17/libs/evas/src/lib/engines/common/evas_blend_pi
> xel_pixel.c,v
> retrieving revision 1.8
> diff -u -r1.8 evas_blend_pixel_pixel.c
> --- e17/libs/evas/src/lib/engines/common/evas_blend_pixel_pixel.c     18 Mar
> 2004 09:06:12 -0000   1.8
> +++ e17/libs/evas/src/lib/engines/common/evas_blend_pixel_pixel.c     24 Mar
> 2004 10:49:19 -0000
> @@ -22,9 +22,12 @@
>     while (dst_ptr < dst_end_ptr)
>       {
>       DATA32 tmp;
> +     DATA8  a;
> +     
> +     a = A_VAL(src_ptr);
>  
>  #ifdef CONDITIONAL_BLEND
> -     switch (A_VAL(src_ptr))
> +     switch (a)
>         {
>          case 0:
>            break;
> @@ -32,27 +35,27 @@
>            *dst_ptr = *src_ptr;
>            break;
>          default:
> -          BLEND_COLOR(A_VAL(src_ptr), R_VAL(dst_ptr), 
> +          BLEND_COLOR(a, R_VAL(dst_ptr), 
>                        R_VAL(src_ptr), R_VAL(dst_ptr), 
>                        tmp);
> -          BLEND_COLOR(A_VAL(src_ptr), G_VAL(dst_ptr), 
> +          BLEND_COLOR(a, G_VAL(dst_ptr), 
>                        G_VAL(src_ptr), G_VAL(dst_ptr), 
>                        tmp);
> -          BLEND_COLOR(A_VAL(src_ptr), B_VAL(dst_ptr), 
> +          BLEND_COLOR(a, B_VAL(dst_ptr), 
>                        B_VAL(src_ptr), B_VAL(dst_ptr), 
>                        tmp);
>            break;
>         }
>  #else
> -     if (A_VAL(src_ptr))
> +     if (a)
>         {
> -          BLEND_COLOR(A_VAL(src_ptr), R_VAL(dst_ptr), 
> +          BLEND_COLOR(a, R_VAL(dst_ptr), 
>                        R_VAL(src_ptr), R_VAL(dst_ptr), 
>                        tmp);
> -          BLEND_COLOR(A_VAL(src_ptr), G_VAL(dst_ptr), 
> +          BLEND_COLOR(a, G_VAL(dst_ptr), 
>                        G_VAL(src_ptr), G_VAL(dst_ptr), 
>                        tmp);
> -          BLEND_COLOR(A_VAL(src_ptr), B_VAL(dst_ptr), 
> +          BLEND_COLOR(a, B_VAL(dst_ptr), 
>                        B_VAL(src_ptr), B_VAL(dst_ptr), 
>                        tmp);
>         }
> @@ -128,9 +131,10 @@
>     while (dst_ptr < dst_end_ptr)
>       {
>       DATA32 tmp;
> -     DATA8  a;
> +     DATA8  a, aa;
>       
> -     switch (A_VAL(src_ptr))
> +     aa = A_VAL(src_ptr);
> +     switch (aa)
>         {
>          case 0:
>            break;
> @@ -138,8 +142,11 @@
>            *dst_ptr = *src_ptr;
>            break;
>          default:
> -          a = _evas_pow_lut[A_VAL(src_ptr)][A_VAL(dst_ptr)];
> +          a = _evas_pow_lut[aa][A_VAL(dst_ptr)];
>            
> +          BLEND_COLOR(aa, A_VAL(dst_ptr), 
> +                      255, A_VAL(dst_ptr), 
> +                      tmp);
>            BLEND_COLOR(a, R_VAL(dst_ptr), 
>                        R_VAL(src_ptr), R_VAL(dst_ptr), 
>                        tmp);
> @@ -149,7 +156,6 @@
>            BLEND_COLOR(a, B_VAL(dst_ptr), 
>                        B_VAL(src_ptr), B_VAL(dst_ptr), 
>                        tmp);  
> -          A_VAL(dst_ptr) = A_VAL(dst_ptr) + ((A_VAL(src_ptr) * (255 -
> A_VAL(dst_ptr))) / 255);
>         }
>       src_ptr++;
>       dst_ptr++;
> 
> *************************************************************************
> ********************************
> 
> Index: e17/libs/evas/src/lib/engines/common/evas_blend_pixel_cmod_pixel.c
> ===================================================================
> RCS file:
> /cvsroot/enlightenment/e17/libs/evas/src/lib/engines/common/evas_blend_pi
> xel_cmod_pixel.c,v
> retrieving revision 1.4
> diff -u -r1.4 evas_blend_pixel_cmod_pixel.c
> --- e17/libs/evas/src/lib/engines/common/evas_blend_pixel_cmod_pixel.c        16
> Mar 2004 08:03:00 -0000       1.4
> +++ e17/libs/evas/src/lib/engines/common/evas_blend_pixel_cmod_pixel.c        24
> Mar 2004 10:48:22 -0000
> @@ -27,7 +27,10 @@
>          case 0:
>            break;
>          case 255:
> -          *dst_ptr = *src_ptr;
> +          A_VAL(dst_ptr) = 0xff;
> +          R_VAL(dst_ptr) = rmod[R_VAL(src_ptr)];
> +          G_VAL(dst_ptr) = gmod[G_VAL(src_ptr)];
> +          B_VAL(dst_ptr) = bmod[B_VAL(src_ptr)];
>            break;
>          default:
>            BLEND_COLOR(a, R_VAL(dst_ptr), 
> @@ -60,17 +63,23 @@
>     while (dst_ptr < dst_end_ptr)
>       {
>       DATA32 tmp;
> -     DATA8  a;
> -     
> -     a = _evas_pow_lut[amod[A_VAL(src_ptr)]][A_VAL(dst_ptr)];
> -     switch (a)
> +     DATA8  a, aa;
> +
> +     aa = amod[A_VAL(src_ptr)];      
> +     switch (aa)
>         {
>          case 0:
>            break;
>          case 255:
> -          *dst_ptr = *src_ptr;
> +          A_VAL(dst_ptr) = 0xff;
> +          R_VAL(dst_ptr) = rmod[R_VAL(src_ptr)];
> +          G_VAL(dst_ptr) = gmod[G_VAL(src_ptr)];
> +          B_VAL(dst_ptr) = bmod[B_VAL(src_ptr)];
>            break;
>          default:
> +          a = _evas_pow_lut[aa][A_VAL(dst_ptr)];
> +          BLEND_COLOR(aa,A_VAL(dst_ptr),
> +                    255,A_VAL(dst_ptr),tmp);
>            BLEND_COLOR(a, R_VAL(dst_ptr), 
>                        rmod[R_VAL(src_ptr)], R_VAL(dst_ptr), 
>                        tmp);
> @@ -80,8 +89,6 @@
>            BLEND_COLOR(a, B_VAL(dst_ptr), 
>                        bmod[B_VAL(src_ptr)], B_VAL(dst_ptr), 
>                        tmp);  
> -          BLEND_COLOR(A_VAL(src),A_VAL(dst),255,A_VAL(dst),tmp);
> -/*        A_VAL(dst_ptr) = A_VAL(dst_ptr) + ((amod[A_VAL(src_ptr)] * (255
> - A_VAL(dst_ptr))) / 255);*/
>            break;
>         }
>       src_ptr++;
> 
> *************************************************************************
> *****************************************
> 
> Index: e17/libs/evas/src/lib/engines/common/evas_blend_pixel_mul_pixel.c
> ===================================================================
> RCS file:
> /cvsroot/enlightenment/e17/libs/evas/src/lib/engines/common/evas_blend_pi
> xel_mul_pixel.c,v
> retrieving revision 1.5
> diff -u -r1.5 evas_blend_pixel_mul_pixel.c
> --- e17/libs/evas/src/lib/engines/common/evas_blend_pixel_mul_pixel.c 18
> Mar 2004 09:06:12 -0000       1.5
> +++ e17/libs/evas/src/lib/engines/common/evas_blend_pixel_mul_pixel.c 24
> Mar 2004 10:48:48 -0000
> @@ -202,6 +202,9 @@
>               default:
>                 a = _evas_pow_lut[aa][A_VAL(dst_ptr)];
>                 
> +               BLEND_COLOR(aa, A_VAL(dst_ptr),
> +                             255, A_VAL(dst_ptr),
> +                             tmp);
>                 BLEND_COLOR(a, R_VAL(dst_ptr), 
>                             R_VAL(src_ptr), R_VAL(dst_ptr), 
>                             tmp);
> @@ -211,7 +214,6 @@
>                 BLEND_COLOR(a, B_VAL(dst_ptr), 
>                             B_VAL(src_ptr), B_VAL(dst_ptr), 
>                             tmp);
> -               A_VAL(dst_ptr) = A_VAL(dst_ptr) + ((aa * (255 - A_VAL(dst_ptr))) /
> 255);
>                 break;
>              }
>            src_ptr++;
> @@ -231,14 +233,17 @@
>               case 0:
>                 break;
>               case 255:
> +               A_VAL(dst_ptr) = 255;
>                 R_VAL(dst_ptr) = ((R_VAL(src_ptr) * (R_VAL(&mul_color) + 1)) >> 8);
>                 G_VAL(dst_ptr) = ((G_VAL(src_ptr) * (G_VAL(&mul_color) + 1)) >> 8);
>                 B_VAL(dst_ptr) = ((B_VAL(src_ptr) * (B_VAL(&mul_color) + 1)) >> 8);
> -               A_VAL(dst_ptr) = 255;
>                 break;
>               default:
>                 a = _evas_pow_lut[aa][A_VAL(dst_ptr)];
>                 
> +               BLEND_COLOR(aa, A_VAL(dst_ptr),
> +                             255, A_VAL(dst_ptr),
> +                             tmp);
>                 BLEND_COLOR(a, R_VAL(dst_ptr), 
>                             ((R_VAL(src_ptr) * (R_VAL(&mul_color) + 1)) >> 8),
> R_VAL(dst_ptr), 
>                             tmp);
> @@ -248,7 +253,6 @@
>                 BLEND_COLOR(a, B_VAL(dst_ptr), 
>                             ((B_VAL(src_ptr) * (B_VAL(&mul_color) + 1)) >> 8),
> B_VAL(dst_ptr), 
>                             tmp);
> -               A_VAL(dst_ptr) = A_VAL(dst_ptr) + ((aa * (255 - A_VAL(dst_ptr))) /
> 255);
>                 break;
>              }
>            src_ptr++;
> 
> *************************************************************************
> **********************************
> 
> Index: e17/libs/evas/src/lib/engines/common/evas_blend_ops.h
> ===================================================================
> RCS file:
> /cvsroot/enlightenment/e17/libs/evas/src/lib/engines/common/evas_blend_op
> s.h,v
> retrieving revision 1.1
> diff -u -r1.1 evas_blend_ops.h
> --- e17/libs/evas/src/lib/engines/common/evas_blend_ops.h     30 Jan 2004
> 05:46:57 -0000        1.1
> +++ e17/libs/evas/src/lib/engines/common/evas_blend_ops.h     24 Mar 2004
> 10:47:36 -0000
> @@ -9,6 +9,9 @@
>     if (A_VAL(src)) /* hmmm - do we need this? */ \
>       { \
>       __a = _evas_pow_lut[A_VAL(src)][A_VAL(dst)]; \
> +     BLEND_COLOR(A_VAL(src), A_VAL(dst), \
> +                 255, A_VAL(dst), \
> +                 __tmp); \
>       BLEND_COLOR(__a, R_VAL(dst), \
>                   R_VAL(src), R_VAL(dst), \
>                   __tmp); \
> @@ -18,7 +21,6 @@
>       BLEND_COLOR(__a, B_VAL(dst), \
>                   B_VAL(src), B_VAL(dst), \
>                   __tmp); \
> -     A_VAL(dst) = A_VAL(dst) + ((A_VAL(src) * (255 - A_VAL(dst))) / 255);\
>       } \
>  }
>  
> 
> *************************************************************************
> *******************
> 
> Index: e17/libs/evas/src/lib/engines/common/evas_line_main.c
> ===================================================================
> RCS file:
> /cvsroot/enlightenment/e17/libs/evas/src/lib/engines/common/evas_line_mai
> n.c,v
> retrieving revision 1.5
> diff -u -r1.5 evas_line_main.c
> --- e17/libs/evas/src/lib/engines/common/evas_line_main.c     18 Mar 2004
> 09:22:36 -0000        1.5
> +++ e17/libs/evas/src/lib/engines/common/evas_line_main.c     24 Mar 2004
> 11:07:33 -0000
> @@ -31,6 +31,8 @@
>     sx = SGN(dx);
>     sy = SGN(dy);
>     
> +   col = dc->col.col;
> +
>     if ((dx == 0) && (dy == 0))
>       {
>       if ((x1 < 0) ||
> @@ -54,6 +56,9 @@
>            ptr = dst->image->data + (y1 * dst->image->w) + x1;
>            __blend_a = _evas_pow_lut[A_VAL(&(col))][A_VAL(ptr)]; 
>            
> +          BLEND_COLOR(A_VAL(&(col)), A_VAL(ptr), 
> +                      255, A_VAL(ptr), 
> +                      __blend_tmp);                 
>            BLEND_COLOR(__blend_a, R_VAL(ptr), 
>                        R_VAL(&(col)), R_VAL(ptr), 
>                        __blend_tmp);                 
> @@ -63,7 +68,6 @@
>            BLEND_COLOR(__blend_a, B_VAL(ptr), 
>                        B_VAL(&(col)), B_VAL(ptr), 
>                        __blend_tmp);                 
> -          A_VAL(ptr) = A_VAL(ptr) + ((A_VAL(&(col)) * (255 - A_VAL(ptr))) /
> 255);
>         }
>       else
>         {
> @@ -86,8 +90,6 @@
>     im = dst->image->data;
>     im_w = dst->image->w;
>     im_h = dst->image->h;   
> -   col = dc->col.col;
> -   if (!A_VAL(&(col))) return;
>  
>     ext_x = 0; ext_y = 0; ext_w = im_w; ext_h = im_h;
>     if (dc->clip.use)
> @@ -146,6 +148,9 @@
>                           
>                           __blend_a = _evas_pow_lut[A_VAL(&(col))][A_VAL(ptr)]; 
>                           
> +                         BLEND_COLOR(A_VAL(&(col)), A_VAL(ptr), 
> +                                     255, A_VAL(ptr), 
> +                                     __blend_tmp);                 
>                           BLEND_COLOR(__blend_a, R_VAL(ptr), 
>                                       R_VAL(&(col)), R_VAL(ptr), 
>                                       __blend_tmp);                 
> @@ -155,7 +160,6 @@
>                           BLEND_COLOR(__blend_a, B_VAL(ptr), 
>                                       B_VAL(&(col)), B_VAL(ptr), 
>                                       __blend_tmp);                 
> -                         A_VAL(ptr) = A_VAL(ptr) + ((A_VAL(&(col)) * (255 -
> A_VAL(ptr))) / 255);
>                        }
>                   }
>                 if (x == x2) return;
> @@ -183,6 +187,9 @@
>                           
>                           __blend_a = _evas_pow_lut[A_VAL(&(col))][A_VAL(ptr)]; 
>                           
> +                         BLEND_COLOR(A_VAL(&(col)), A_VAL(ptr), 
> +                                     255, A_VAL(ptr), 
> +                                     __blend_tmp);                 
>                           BLEND_COLOR(__blend_a, R_VAL(ptr), 
>                                       R_VAL(&(col)), R_VAL(ptr), 
>                                       __blend_tmp);
> @@ -192,7 +199,6 @@
>                           BLEND_COLOR(__blend_a, B_VAL(ptr), 
>                                       B_VAL(&(col)), B_VAL(ptr), 
>                                       __blend_tmp);
> -                         A_VAL(ptr) = A_VAL(ptr) + ((A_VAL(&(col)) * (255 -
> A_VAL(ptr))) / 255);
>                        }
>                   }
>                 if (y == y2) return;
> 
> 
> *************************************************************************
> ***************************************
> 
> 
> 
> -------------------------------------------------------
> This SF.Net email is sponsored by: IBM Linux Tutorials
> Free Linux tutorial presented by Daniel Robbins, President and CEO of
> GenToo technologies. Learn everything from fundamentals to system
> administration.http://ads.osdn.com/?ad_id=1470&alloc_id=3638&op=click
> _______________________________________________
> enlightenment-devel mailing list
> [EMAIL PROTECTED]
> https://lists.sourceforge.net/lists/listinfo/enlightenment-devel


-- 
------------- Codito, ergo sum - "I code, therefore I am" --------------
The Rasterman (Carsten Haitzler)    [EMAIL PROTECTED]
熊耳 - 車君 (数田)                  [EMAIL PROTECTED]
Tokyo, Japan (東京 日本)


-------------------------------------------------------
This SF.Net email is sponsored by: IBM Linux Tutorials
Free Linux tutorial presented by Daniel Robbins, President and CEO of
GenToo technologies. Learn everything from fundamentals to system
administration.http://ads.osdn.com/?ad_id=1470&alloc_id=3638&op=click
_______________________________________________
enlightenment-devel mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/enlightenment-devel

Reply via email to