Index: src/core/SkColorSpace.cpp |
diff --git a/src/core/SkColorSpace.cpp b/src/core/SkColorSpace.cpp |
index e6676066bb24beac7ee8125478d1715921829fb9..54bee247a27bdf4961ca0eab3ecc88c271626b2c 100644 |
--- a/src/core/SkColorSpace.cpp |
+++ b/src/core/SkColorSpace.cpp |
@@ -132,6 +132,26 @@ sk_sp<SkColorSpace> SkColorSpace::NewRGB(RenderTargetGamma gamma, const SkMatrix |
} |
} |
+sk_sp<SkColorSpace> SkColorSpace::NewRGB(const SkTransferFn& coeffs, const SkMatrix44& toXYZD50) { |
+ // TODO: Check if coeffs match sRGB, 2.2, or linear. |
+ // TODO: Make sure coefficients describe a valid curve. Return nullptr if they don't. |
+ void* memory = sk_malloc_throw(sizeof(SkGammas) + sizeof(SkTransferFn)); |
+ sk_sp<SkGammas> gammas = sk_sp<SkGammas>(new (memory) SkGammas()); |
+ void* storage = SkTAddOffset<void>(memory, sizeof(SkGammas)); |
+ memcpy(storage, &coeffs, sizeof(SkTransferFn)); |
+ gammas->fRedType = SkGammas::Type::kParam_Type; |
+ gammas->fGreenType = SkGammas::Type::kParam_Type; |
+ gammas->fBlueType = SkGammas::Type::kParam_Type; |
+ |
+ SkGammas::Data data; |
+ data.fParamOffset = 0; |
+ gammas->fRedData = data; |
+ gammas->fGreenData = data; |
+ gammas->fBlueData = data; |
+ return sk_sp<SkColorSpace>(new SkColorSpace_Base(nullptr, kNonStandard_SkGammaNamed, |
+ std::move(gammas), toXYZD50, nullptr)); |
+} |
+ |
static SkColorSpace* gAdobeRGB; |
static SkColorSpace* gSRGB; |
@@ -270,6 +290,8 @@ size_t SkColorSpace::writeToMemory(void* memory) const { |
return sizeof(ColorSpaceHeader) + 12 * sizeof(float); |
} |
default: |
+ // TODO: Fix this to serialize properly. |
+ |
// Otherwise, write the gamma values and the matrix. |
if (memory) { |
*((ColorSpaceHeader*) memory) = |
@@ -369,6 +391,8 @@ sk_sp<SkColorSpace> SkColorSpace::Deserialize(const void* data, size_t length) { |
return NewICC(data, profileSize); |
} |
case ColorSpaceHeader::kFloatGamma_Flag: { |
+ // TODO: Fix this to deserialize properly. |
+ |
if (length < 15 * sizeof(float)) { |
return nullptr; |
} |