diff options
author | Mike Klein <mtklein@chromium.org> | 2018-07-12 11:08:51 -0400 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2018-07-12 15:58:28 +0000 |
commit | 5551a94b9e0fc822cda36d3bb5b70a97d2be4c17 (patch) | |
tree | 6eba10f6145be2d4dea10354f28374e51305967f /src/core/SkPM4fPriv.h | |
parent | f494bd2ebb0160f381feeb9d3a241343935546dc (diff) |
update color management for color shaders
Change-Id: I4d85ad9d02576dbdb9c50f38418b5e96ba6d4164
Reviewed-on: https://skia-review.googlesource.com/141042
Commit-Queue: Mike Klein <mtklein@chromium.org>
Commit-Queue: Brian Osman <brianosman@google.com>
Auto-Submit: Mike Klein <mtklein@chromium.org>
Reviewed-by: Brian Osman <brianosman@google.com>
Diffstat (limited to 'src/core/SkPM4fPriv.h')
-rw-r--r-- | src/core/SkPM4fPriv.h | 25 |
1 files changed, 16 insertions, 9 deletions
diff --git a/src/core/SkPM4fPriv.h b/src/core/SkPM4fPriv.h index f9458f6df9..71a56cdc5e 100644 --- a/src/core/SkPM4fPriv.h +++ b/src/core/SkPM4fPriv.h @@ -37,21 +37,28 @@ static inline uint32_t Sk4f_toL32(const Sk4f& px) { return l32; } -static inline SkPM4f premul_in_dst_colorspace(SkColor color, SkColorSpace* dstCS) { - float rgba[4]; - swizzle_rb(Sk4f_fromL32(color)).store(rgba); - - // SkColors are always sRGB. - auto srcCS = SkColorSpace::MakeSRGB().get(); +static inline SkPM4f premul_in_dst_colorspace(SkColor4f color4f, + SkColorSpace* srcCS, SkColorSpace* dstCS) { + // We treat untagged sources as sRGB. + if (!srcCS) { srcCS = SkColorSpace::MakeSRGB().get(); } // If dstCS is null, no color space transformation is needed (and apply() will just premul). if (!dstCS) { dstCS = srcCS; } - // TODO: Can we use a precomputed sRGB -> dstCS SkColorSpaceXformSteps for each device? + // TODO: In the very common case of srcCS being sRGB, + // can we precompute an sRGB -> dstCS SkColorSpaceXformSteps for each device and use it here? SkColorSpaceXformSteps(srcCS, kUnpremul_SkAlphaType, dstCS) - .apply(rgba); + .apply(color4f.vec()); + + return {{color4f.fR, color4f.fG, color4f.fB, color4f.fA}}; +} - return {{rgba[0], rgba[1], rgba[2], rgba[3]}}; +static inline SkPM4f premul_in_dst_colorspace(SkColor c, SkColorSpace* dstCS) { + SkColor4f color4f; + swizzle_rb(Sk4f_fromL32(c)).store(color4f.vec()); + + // SkColors are always sRGB. + return premul_in_dst_colorspace(color4f, SkColorSpace::MakeSRGB().get(), dstCS); } // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |