The overall goal of the following patches is to make it more obvious how the blend mode code relates to the specifications. To that end, the comment for each blend routine is updated with some math that shows how we go from specification to a formula that can deal with premultiplied alpha, and the code is updated to follow the math as much as possible.
The blend routines for Color Dodge and Color Burn are rewritten to match the derived formulas. In the case of Color Dodge, this in some sense makes the code less correct because the new code can now underflow the unsigned variables when the source pixel is superluminescent, while the old code was careful to clamp to zero. In the case of Color Burn, I believe the new code is a net improvement since the old code could underflow whereas the new code can't. The reason I don't care too much about the code being correct is that the blend mode code in general has a number of issues that makes it not work very well, especially when superluminescent pixels are involved. For one, the use of unsigned variables is wrong; for another, the macros use a non-saturating sum that can sometimes overflow. I have some plans to fix the blend modes for real, but for now the only thing I want to accomplish with this patch set, is to make the connection between code and formulas clear. Soren _______________________________________________ Pixman mailing list Pixman@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/pixman