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. |
* |