Around 7 o'clock on May 16, Keith Packard wrote:

> I'm going to run some numbers and see whether I can fix this by changing 
> the precision of various alpha computations

I think this particular problem is occuring because we're losing half a 
bit of alpha in the conversion from area to alpha.  Remember that the
area to alpha computation is currently specified by:

int AreaAlpha (Fixed_1_31 area, int depth)
{
        ((area >> depth) * ((1 << depth) - 1)) >> (31 - depth)
}

Rounding instead of truncating in that computation fixes this particular
problem:

int AreaAlpha (Fixed_1_31 area, int depth)
{
        ((((area + (1 << (depth - 1)) >> depth) * ((1 << depth) - 1) +
          (1 << (30 - depth))) >> (31 - depth);
}

I'm going to give that a try.

Keith Packard        XFree86 Core Team        HP Cambridge Research Lab


_______________________________________________
Render mailing list
[EMAIL PROTECTED]
http://XFree86.Org/mailman/listinfo/render

Reply via email to