Index: src/core/SkColorSpace.h |
diff --git a/src/core/SkColorSpace.h b/src/core/SkColorSpace.h |
index 0708e5713d5bebe45908bda674d2161241dc8b62..b8e6fac0613728d62fc094e154aac6156d6dfbf5 100644 |
--- a/src/core/SkColorSpace.h |
+++ b/src/core/SkColorSpace.h |
@@ -35,6 +35,51 @@ struct SkFloat3x3 { |
void dump() const; |
}; |
+struct SkGamma { |
+ static const uint32_t kGammaUseValueFlag = 0x1; |
+ static const uint32_t kGammaUseTableFlag = 0x2; |
+ static const uint32_t kGammaUseParametricFlag = 0x4; |
+ |
+ bool isValue() const { return kGammaUseValueFlag & fFlag; } |
+ bool isTable() const { return kGammaUseTableFlag & fFlag; } |
+ bool isParametric() const { return kGammaUseParametricFlag & fFlag; } |
+ |
+ uint32_t fFlag; |
+ |
+ // Values |
+ float fValue; |
+ |
+ // Table |
+ uint32_t fTableSize; |
+ std::unique_ptr<float[]> fTable; |
+ |
+ // Parametric |
+ // FIXME (msarett): Handle parametric curves. |
+ |
+ SkGamma() { |
+ memset(this, 0, sizeof(struct SkGamma)); |
+ } |
+ |
+ static SkGamma sRGB() { |
+ SkGamma gamma; |
+ gamma.fFlag = kGammaUseValueFlag; |
+ gamma.fValue = 2.2f; |
+ return std::move(gamma); |
+ } |
+}; |
+ |
+struct SkGammas { |
+ SkGamma fGammas[3]; |
+ |
+ static SkGammas sRGB() { |
+ SkGammas gammas; |
+ gammas.fGammas[0] = std::move(SkGamma::sRGB()); |
+ gammas.fGammas[1] = std::move(SkGamma::sRGB()); |
+ gammas.fGammas[2] = std::move(SkGamma::sRGB()); |
+ return std::move(gammas); |
+ } |
+}; |
+ |
struct SkColorLookUpTable { |
static const uint8_t kMaxChannels = 16; |
@@ -63,12 +108,12 @@ public: |
* Return a colorspace instance, given a 3x3 transform from linear_RGB to D50_XYZ |
* and the src-gamma, return a ColorSpace |
*/ |
- static sk_sp<SkColorSpace> NewRGB(const SkFloat3x3& toXYZD50, const SkFloat3& gamma); |
+ static sk_sp<SkColorSpace> NewRGB(const SkFloat3x3& toXYZD50, SkGammas gammas); |
static sk_sp<SkColorSpace> NewNamed(Named); |
static sk_sp<SkColorSpace> NewICC(const void*, size_t); |
- SkFloat3 gamma() const { return fGamma; } |
+ const SkGammas& gammas() const { return fGammas; } |
SkFloat3x3 xyz() const { return fToXYZD50; } |
Named named() const { return fNamed; } |
uint32_t uniqueID() const { return fUniqueID; } |
@@ -89,13 +134,13 @@ public: |
void dump() const; |
private: |
- SkColorSpace(const SkFloat3& gamma, const SkFloat3x3& toXYZ, Named); |
+ SkColorSpace(SkGammas gammas, const SkFloat3x3& toXYZ, Named); |
- SkColorSpace(SkColorLookUpTable colorLUT, const SkFloat3& gamma, const SkFloat3x3& toXYZ, |
+ SkColorSpace(SkColorLookUpTable colorLUT, SkGammas gammas, const SkFloat3x3& toXYZ, |
const SkFloat3& toXYZOffset); |
const SkColorLookUpTable fColorLUT; |
- const SkFloat3 fGamma; |
+ const SkGammas fGammas; |
const SkFloat3x3 fToXYZD50; |
const SkFloat3 fToXYZOffset; |