Chromium Code Reviews| Index: src/core/SkColorSpace.cpp |
| diff --git a/src/core/SkColorSpace.cpp b/src/core/SkColorSpace.cpp |
| index e6676066bb24beac7ee8125478d1715921829fb9..9885acc0d8d32910312d45b2906fc2586b282dab 100644 |
| --- a/src/core/SkColorSpace.cpp |
| +++ b/src/core/SkColorSpace.cpp |
| @@ -19,6 +19,7 @@ SkColorSpace_Base::SkColorSpace_Base(SkGammaNamed gammaNamed, const SkMatrix44& |
| , fGammaNamed(gammaNamed) |
| , fGammas(nullptr) |
| , fProfileData(nullptr) |
| + , fFromXYZD50(SkMatrix44::kUninitialized_Constructor) |
| {} |
| SkColorSpace_Base::SkColorSpace_Base(sk_sp<SkColorLookUpTable> colorLUT, SkGammaNamed gammaNamed, |
| @@ -29,6 +30,7 @@ SkColorSpace_Base::SkColorSpace_Base(sk_sp<SkColorLookUpTable> colorLUT, SkGamma |
| , fGammaNamed(gammaNamed) |
| , fGammas(std::move(gammas)) |
| , fProfileData(std::move(profileData)) |
| + , fFromXYZD50(SkMatrix44::kUninitialized_Constructor) |
| {} |
| static constexpr float gSRGB_toXYZD50[] { |
| @@ -43,6 +45,18 @@ static constexpr float gAdobeRGB_toXYZD50[] { |
| 0.1492f, 0.0632f, 0.7448f, // * B |
| }; |
| +const SkMatrix44& SkColorSpace_Base::fromXYZ() const { |
|
msarett
2016/09/08 15:06:07
nit: In my head, this should be next to the other
|
| + fFromXYZOnce([this] { |
| + if (!fToXYZD50.invert(&fFromXYZD50)) { |
| + SkDEBUGFAIL("Non-invertible XYZ matrix, defaulting to sRGB"); |
| + SkMatrix44 srgbToxyzD50(SkMatrix44::kUninitialized_Constructor); |
|
msarett
2016/09/08 15:06:07
I'm fine with this behavior, but just to be clear
|
| + srgbToxyzD50.set3x3RowMajorf(gSRGB_toXYZD50); |
| + srgbToxyzD50.invert(&fFromXYZD50); |
| + } |
| + }); |
| + return fFromXYZD50; |
| +} |
| + |
| /** |
| * Checks if our toXYZ matrix is a close match to a known color gamut. |
| * |