aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/effects/gradients/Sk4fGradientPriv.h
diff options
context:
space:
mode:
authorGravatar fmalita <fmalita@chromium.org>2016-03-23 12:28:14 -0700
committerGravatar Commit bot <commit-bot@chromium.org>2016-03-23 12:28:14 -0700
commit83aa9208dab96f1b6affa8167522e9a94afd70a5 (patch)
tree48bd23932aa26876891c67dcae95032df280fd2c /src/effects/gradients/Sk4fGradientPriv.h
parent39b54951c4e61c137d9911685600490da25470c1 (diff)
Planar ramp() for S32 linear gradients
Diffstat (limited to 'src/effects/gradients/Sk4fGradientPriv.h')
-rw-r--r--src/effects/gradients/Sk4fGradientPriv.h10
1 files changed, 5 insertions, 5 deletions
diff --git a/src/effects/gradients/Sk4fGradientPriv.h b/src/effects/gradients/Sk4fGradientPriv.h
index 4f71d3f14d..ae6fe7ce46 100644
--- a/src/effects/gradients/Sk4fGradientPriv.h
+++ b/src/effects/gradients/Sk4fGradientPriv.h
@@ -108,19 +108,19 @@ struct DstTraits<DstType::S32, premul> {
using PM = PremulTraits<premul>;
using Type = SkPMColor;
- // TODO: prescale by something like (255^2, 255^2, 255^2, 255) and use
- // linear_to_srgb to save a mult in store?
static Sk4f load(const SkPM4f& c) {
- return c.to4f_pmorder();
+ // Prescaling by (255^2, 255^2, 255^2, 255) on load, to avoid a 255 multiply on
+ // each store (S32 conversion yields a uniform 255 factor).
+ return c.to4f_pmorder() * Sk4f(255 * 255, 255 * 255, 255 * 255, 255);
}
static void store(const Sk4f& c, Type* dst) {
// FIXME: this assumes opaque colors. Handle unpremultiplication.
- *dst = Sk4f_toS32(PM::apply(c));
+ *dst = to_4b(linear_to_srgb(PM::apply(c)));
}
static void store(const Sk4f& c, Type* dst, int n) {
- sk_memset32(dst, Sk4f_toS32(PM::apply(c)), n);
+ sk_memset32(dst, to_4b(linear_to_srgb(PM::apply(c))), n);
}
static void store4x(const Sk4f& c0, const Sk4f& c1,