aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/core/SkPM4fPriv.h
diff options
context:
space:
mode:
authorGravatar Mike Klein <mtklein@chromium.org>2018-07-12 11:08:51 -0400
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2018-07-12 15:58:28 +0000
commit5551a94b9e0fc822cda36d3bb5b70a97d2be4c17 (patch)
tree6eba10f6145be2d4dea10354f28374e51305967f /src/core/SkPM4fPriv.h
parentf494bd2ebb0160f381feeb9d3a241343935546dc (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.h25
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);
}
// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!