From 83aa9208dab96f1b6affa8167522e9a94afd70a5 Mon Sep 17 00:00:00 2001 From: fmalita Date: Wed, 23 Mar 2016 12:28:14 -0700 Subject: Planar ramp() for S32 linear gradients R=mtklein@google.com,reed@google.com GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1825333003 Review URL: https://codereview.chromium.org/1825333003 --- src/effects/gradients/Sk4fGradientPriv.h | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'src/effects/gradients/Sk4fGradientPriv.h') 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 { using PM = PremulTraits; 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, -- cgit v1.2.3