aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorGravatar reed <reed@chromium.org>2015-04-07 06:13:45 -0700
committerGravatar Commit bot <commit-bot@chromium.org>2015-04-07 06:13:45 -0700
commit6cad1da6ef6a41c25258a42cd36e9a591a1cc076 (patch)
treed86b0e0962e7ea2966d20955271d16a22c832f29 /src
parentb679ca8926a832274b14fdb512f88f64b61d32ea (diff)
simplify xfers
Diffstat (limited to 'src')
-rw-r--r--src/core/SkXfermode.cpp26
1 files changed, 3 insertions, 23 deletions
diff --git a/src/core/SkXfermode.cpp b/src/core/SkXfermode.cpp
index 1d502d987c..9c131ca241 100644
--- a/src/core/SkXfermode.cpp
+++ b/src/core/SkXfermode.cpp
@@ -1201,13 +1201,6 @@ static Sk4f clamp_0_255(const Sk4f& value) {
return Sk4f::Max(Sk4f(0), Sk4f::Min(Sk4f(255), value));
}
-// return a swizzle of a | rgb
-static Sk4f set_a_rgb(const Sk4f& a, const Sk4f& rgb) {
- SkPMFloat pma = a;
- SkPMFloat pmc = rgb;
- return SkPMFloat(pma.a(), pmc.r(), pmc.g(), pmc.b());
-}
-
/**
* Some modes can, due to very slight numerical error, generate "invalid" pmcolors...
*
@@ -1315,7 +1308,7 @@ struct Difference4f {
Sk4f dc = dst;
Sk4f min = Sk4f::Min(sc * da, dc * sa) * inv255;
Sk4f ra = sc + dc - min;
- return check_as_pmfloat(set_a_rgb(ra, ra - min));
+ return check_as_pmfloat(ra - min * SkPMFloat(0, 1, 1, 1));
}
static const bool kFoldCoverageIntoSrcAlpha = false;
static const SkXfermode::Mode kMode = SkXfermode::kDifference_Mode;
@@ -1328,7 +1321,7 @@ struct Exclusion4f {
Sk4f dc = dst;
Sk4f prod = sc * dc * inv255;
Sk4f ra = sc + dc - prod;
- return check_as_pmfloat(set_a_rgb(ra, ra - prod));
+ return check_as_pmfloat(ra - prod * SkPMFloat(0, 1, 1, 1));
}
static const bool kFoldCoverageIntoSrcAlpha = false;
static const SkXfermode::Mode kMode = SkXfermode::kExclusion_Mode;
@@ -1343,21 +1336,8 @@ public:
void xfer32(SkPMColor dst[], const SkPMColor src[], int n, const SkAlpha aa[]) const override {
if (NULL == aa) {
- while (n & 3) {
- *dst = ProcType::Xfer(SkPMFloat(*src++), SkPMFloat(*dst)).round();
- dst++;
- n -= 1;
- }
- n >>= 2;
for (int i = 0; i < n; ++i) {
- SkPMFloat s0, s1, s2, s3;
- SkPMFloat::From4PMColors(src, &s0, &s1, &s2, &s3);
- SkPMFloat d0, d1, d2, d3;
- SkPMFloat::From4PMColors(dst, &d0, &d1, &d2, &d3);
- SkPMFloat::RoundTo4PMColors(ProcType::Xfer(s0, d0), ProcType::Xfer(s1, d1),
- ProcType::Xfer(s2, d2), ProcType::Xfer(s3, d3), dst);
- src += 4;
- dst += 4;
+ dst[i] = ProcType::Xfer(SkPMFloat(src[i]), SkPMFloat(dst[i])).round();
}
} else {
for (int i = 0; i < n; ++i) {