Add SkColorSpace_Base::makeColorSpin
This is a utility that creates a version of an existing XYZ color space
that performs our color spin operation. Assigning this to a source remaps
RGB to GBR. Assigning it to a destination does the opposite (RGB to BRG).
Bug: skia:
Change-Id: I3528698220bd32aa01dcd3db225e60f151a4b5bd
Reviewed-on: https://skia-review.googlesource.com/71280
Commit-Queue: Brian Osman <brianosman@google.com>
Reviewed-by: Mike Klein <mtklein@chromium.org>
diff --git a/gm/color4f.cpp b/gm/color4f.cpp
index 2ebe931..36850a1 100644
--- a/gm/color4f.cpp
+++ b/gm/color4f.cpp
@@ -96,11 +96,7 @@
canvas->translate(10, 10);
auto srgb = SkColorSpace::MakeSRGB();
-
- SkMatrix44 mat(SkMatrix44::kUninitialized_Constructor);
- // red -> blue, green -> red, blue -> green (sRGB)
- mat.set3x3(0, 0, 1, 1, 0, 0, 0, 1, 0);
- mat.postConcat(*as_CSB(srgb)->toXYZD50());
+ auto spin = as_CSB(srgb)->makeColorSpin(); // RGB -> GBR
const SkColor4f colors[] {
{ 1, 0, 0, 1 },
@@ -116,8 +112,7 @@
sk_sp<SkShader> shaders[] {
SkShader::MakeColorShader(c4, nullptr),
SkShader::MakeColorShader(c4, srgb),
- SkShader::MakeColorShader(c4,
- SkColorSpace::MakeRGB(SkColorSpace::kLinear_RenderTargetGamma, mat)),
+ SkShader::MakeColorShader(c4, spin),
};
canvas->save();