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 |