| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2006 The Android Open Source Project | 2 * Copyright 2006 The Android Open Source Project |
| 3 * | 3 * |
| 4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
| 5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
| 6 */ | 6 */ |
| 7 | 7 |
| 8 #include "SkXfermode.h" | 8 #include "SkXfermode.h" |
| 9 #include "SkXfermode_proccoeff.h" | 9 #include "SkXfermode_proccoeff.h" |
| 10 #include "SkColorPriv.h" | 10 #include "SkColorPriv.h" |
| (...skipping 1443 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1454 | 1454 |
| 1455 KERNEL(srcin) { return s * da; } | 1455 KERNEL(srcin) { return s * da; } |
| 1456 KERNEL(srcout) { return s * inv(da); } | 1456 KERNEL(srcout) { return s * inv(da); } |
| 1457 KERNEL(srcatop) { return s*da + d*inv(sa); } | 1457 KERNEL(srcatop) { return s*da + d*inv(sa); } |
| 1458 KERNEL(dstin) { return srcin (d,da,s,sa); } | 1458 KERNEL(dstin) { return srcin (d,da,s,sa); } |
| 1459 KERNEL(dstout) { return srcout (d,da,s,sa); } | 1459 KERNEL(dstout) { return srcout (d,da,s,sa); } |
| 1460 KERNEL(dstatop) { return srcatop(d,da,s,sa); } | 1460 KERNEL(dstatop) { return srcatop(d,da,s,sa); } |
| 1461 | 1461 |
| 1462 KERNEL(modulate) { return s*d; } | 1462 KERNEL(modulate) { return s*d; } |
| 1463 KERNEL(multiply) { return s*inv(da) + d*inv(sa) + s*d; } | 1463 KERNEL(multiply) { return s*inv(da) + d*inv(sa) + s*d; } |
| 1464 KERNEL(plus) { return s + d; } | 1464 KERNEL(plus_) { return s + d; } |
| 1465 KERNEL(screen) { return s + d - s*d; } | 1465 KERNEL(screen) { return s + d - s*d; } |
| 1466 KERNEL(xor_) { return s*inv(da) + d*inv(sa); } | 1466 KERNEL(xor_) { return s*inv(da) + d*inv(sa); } |
| 1467 | 1467 |
| 1468 // Most of the rest apply the same logic to each color channel, and srcover's lo
gic to alpha. | 1468 // Most of the rest apply the same logic to each color channel, and srcover's lo
gic to alpha. |
| 1469 // (darken and lighten can actually go either way, but they're a little faster t
his way.) | 1469 // (darken and lighten can actually go either way, but they're a little faster t
his way.) |
| 1470 template <Sk4f kernel(const Sk4f& s, const Sk4f& sa, const Sk4f& d, const Sk4f&
da)> | 1470 template <Sk4f kernel(const Sk4f& s, const Sk4f& sa, const Sk4f& d, const Sk4f&
da)> |
| 1471 static void SK_VECTORCALL rgb_srcover(SkRasterPipeline::Stage* st, size_t x, | 1471 static void SK_VECTORCALL rgb_srcover(SkRasterPipeline::Stage* st, size_t x, |
| 1472 Sk4f r, Sk4f g, Sk4f b, Sk4f a, | 1472 Sk4f r, Sk4f g, Sk4f b, Sk4f a, |
| 1473 Sk4f dr, Sk4f dg, Sk4f db, Sk4f da) { | 1473 Sk4f dr, Sk4f dg, Sk4f db, Sk4f da) { |
| 1474 r = kernel(r,a,dr,da); | 1474 r = kernel(r,a,dr,da); |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1524 case kDstATop_Mode: p->append(rgba<dstatop>); return true; | 1524 case kDstATop_Mode: p->append(rgba<dstatop>); return true; |
| 1525 case kSrcIn_Mode: p->append(rgba<srcin>); return true; | 1525 case kSrcIn_Mode: p->append(rgba<srcin>); return true; |
| 1526 case kDstIn_Mode: p->append(rgba<dstin>); return true; | 1526 case kDstIn_Mode: p->append(rgba<dstin>); return true; |
| 1527 case kSrcOut_Mode: p->append(rgba<srcout>); return true; | 1527 case kSrcOut_Mode: p->append(rgba<srcout>); return true; |
| 1528 case kDstOut_Mode: p->append(rgba<dstout>); return true; | 1528 case kDstOut_Mode: p->append(rgba<dstout>); return true; |
| 1529 case kDstOver_Mode: p->append(rgba<dstover>); return true; | 1529 case kDstOver_Mode: p->append(rgba<dstover>); return true; |
| 1530 | 1530 |
| 1531 case kClear_Mode: p->append(rgba<clear>); return true; | 1531 case kClear_Mode: p->append(rgba<clear>); return true; |
| 1532 case kModulate_Mode: p->append(rgba<modulate>); return true; | 1532 case kModulate_Mode: p->append(rgba<modulate>); return true; |
| 1533 case kMultiply_Mode: p->append(rgba<multiply>); return true; | 1533 case kMultiply_Mode: p->append(rgba<multiply>); return true; |
| 1534 case kPlus_Mode: p->append(rgba<plus>); return true; | 1534 case kPlus_Mode: p->append(rgba<plus_>); return true; |
| 1535 case kScreen_Mode: p->append(rgba<screen>); return true; | 1535 case kScreen_Mode: p->append(rgba<screen>); return true; |
| 1536 case kXor_Mode: p->append(rgba<xor_>); return true; | 1536 case kXor_Mode: p->append(rgba<xor_>); return true; |
| 1537 | 1537 |
| 1538 case kColorBurn_Mode: p->append(rgb_srcover<colorburn>); return true; | 1538 case kColorBurn_Mode: p->append(rgb_srcover<colorburn>); return true; |
| 1539 case kColorDodge_Mode: p->append(rgb_srcover<colordodge>); return true; | 1539 case kColorDodge_Mode: p->append(rgb_srcover<colordodge>); return true; |
| 1540 case kDarken_Mode: p->append(rgb_srcover<darken>); return true; | 1540 case kDarken_Mode: p->append(rgb_srcover<darken>); return true; |
| 1541 case kDifference_Mode: p->append(rgb_srcover<difference>); return true; | 1541 case kDifference_Mode: p->append(rgb_srcover<difference>); return true; |
| 1542 case kExclusion_Mode: p->append(rgb_srcover<exclusion>); return true; | 1542 case kExclusion_Mode: p->append(rgb_srcover<exclusion>); return true; |
| 1543 case kHardLight_Mode: p->append(rgb_srcover<hardlight>); return true; | 1543 case kHardLight_Mode: p->append(rgb_srcover<hardlight>); return true; |
| 1544 case kLighten_Mode: p->append(rgb_srcover<lighten>); return true; | 1544 case kLighten_Mode: p->append(rgb_srcover<lighten>); return true; |
| 1545 case kOverlay_Mode: p->append(rgb_srcover<overlay>); return true; | 1545 case kOverlay_Mode: p->append(rgb_srcover<overlay>); return true; |
| 1546 case kSoftLight_Mode: p->append(rgb_srcover<softlight>); return true; | 1546 case kSoftLight_Mode: p->append(rgb_srcover<softlight>); return true; |
| 1547 | 1547 |
| 1548 // TODO | 1548 // TODO |
| 1549 case kColor_Mode: return false; | 1549 case kColor_Mode: return false; |
| 1550 case kHue_Mode: return false; | 1550 case kHue_Mode: return false; |
| 1551 case kLuminosity_Mode: return false; | 1551 case kLuminosity_Mode: return false; |
| 1552 case kSaturation_Mode: return false; | 1552 case kSaturation_Mode: return false; |
| 1553 } | 1553 } |
| 1554 return false; | 1554 return false; |
| 1555 } | 1555 } |
| OLD | NEW |