Index: src/core/SkColorSpace.h |
diff --git a/src/core/SkColorSpace.h b/src/core/SkColorSpace.h |
index a1ccf13fe0c61af76922e50c9f2d9ac538b260a2..2b3b15fe95576c33f5def8e4a341c5797a9bac30 100644 |
--- a/src/core/SkColorSpace.h |
+++ b/src/core/SkColorSpace.h |
@@ -35,121 +35,57 @@ |
void dump() const; |
}; |
+struct SkColorLookUpTable { |
+ static const uint8_t kMaxChannels = 16; |
+ |
+ uint8_t fInputChannels; |
+ uint8_t fOutputChannels; |
+ uint8_t fGridPoints[kMaxChannels]; |
+ std::unique_ptr<float[]> fTable; |
+ |
+ SkColorLookUpTable() { |
+ memset(this, 0, sizeof(struct SkColorLookUpTable)); |
+ } |
+ |
+ SkColorLookUpTable(SkColorLookUpTable&& that) |
+ : fInputChannels(that.fInputChannels) |
+ , fOutputChannels(that.fOutputChannels) |
+ , fTable(std::move(that.fTable)) |
+ { |
+ memcpy(fGridPoints, that.fGridPoints, kMaxChannels); |
+ } |
+}; |
+ |
class SkColorSpace : public SkRefCnt { |
-private: |
- struct SkGammaCurve { |
- bool isValue() const { |
- bool result = (0.0f != fValue); |
- SkASSERT(!result || (0 == fTableSize)); |
- return result; |
- } |
- |
- bool isTable() const { |
- bool result = (0 != fTableSize); |
- SkASSERT(!result || (0.0f == fValue)); |
- SkASSERT(!result || fTable); |
- return result; |
- } |
- |
- bool isParametric() const { return false; } |
- |
- // We have three different ways to represent gamma. |
- // (1) A single value: |
- float fValue; |
- |
- // (2) A lookup table: |
- uint32_t fTableSize; |
- std::unique_ptr<float[]> fTable; |
- |
- // (3) Parameters for a curve: |
- // FIXME (msarett): Handle parametric curves. |
- |
- SkGammaCurve() { |
- memset(this, 0, sizeof(struct SkGammaCurve)); |
- } |
- |
- SkGammaCurve(float value) |
- : fValue(value) |
- , fTableSize(0) |
- , fTable(nullptr) |
- {} |
- }; |
- |
- struct SkColorLookUpTable { |
- static const uint8_t kMaxChannels = 16; |
- |
- uint8_t fInputChannels; |
- uint8_t fOutputChannels; |
- uint8_t fGridPoints[kMaxChannels]; |
- std::unique_ptr<float[]> fTable; |
- |
- SkColorLookUpTable() { |
- memset(this, 0, sizeof(struct SkColorLookUpTable)); |
- } |
- }; |
- |
public: |
enum Named { |
kUnknown_Named, |
kSRGB_Named, |
}; |
- struct SkGammas { |
- public: |
- SkGammas(float red, float green, float blue) |
- : fRed(red) |
- , fGreen(green) |
- , fBlue(blue) |
- {} |
- |
- SkGammas() {} |
- |
- SkDEBUGCODE(float red() const { return fRed.fValue; }) |
- SkDEBUGCODE(float green() const { return fGreen.fValue; }) |
- SkDEBUGCODE(float blue() const { return fBlue.fValue; }) |
- |
- private: |
- SkGammaCurve fRed; |
- SkGammaCurve fGreen; |
- SkGammaCurve fBlue; |
- |
- friend class SkColorSpace; |
- }; |
- |
/** |
* 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, SkGammas gammas); |
+ static sk_sp<SkColorSpace> NewRGB(const SkFloat3x3& toXYZD50, const SkFloat3& gamma); |
static sk_sp<SkColorSpace> NewNamed(Named); |
static sk_sp<SkColorSpace> NewICC(const void*, size_t); |
- const SkGammas& gammas() const { return fGammas; } |
+ SkFloat3 gamma() const { return fGamma; } |
SkFloat3x3 xyz() const { return fToXYZD50; } |
SkFloat3 xyzOffset() const { return fToXYZOffset; } |
Named named() const { return fNamed; } |
uint32_t uniqueID() const { return fUniqueID; } |
private: |
+ SkColorSpace(const SkFloat3& gamma, const SkFloat3x3& toXYZ, Named); |
- static bool LoadGammas(SkGammaCurve* gammas, uint32_t num, const uint8_t* src, size_t len); |
- |
- |
- static bool LoadColorLUT(SkColorLookUpTable* colorLUT, uint32_t inputChannels, |
- uint32_t outputChannels, const uint8_t* src, size_t len); |
- |
- |
- static bool LoadA2B0(SkColorLookUpTable* colorLUT, SkGammas* gammas, SkFloat3x3* toXYZ, |
- SkFloat3* toXYZOffset, const uint8_t* src, size_t len); |
- |
- SkColorSpace(SkGammas gammas, const SkFloat3x3& toXYZ, Named); |
- |
- SkColorSpace(SkColorLookUpTable colorLUT, SkGammas gammas, |
- const SkFloat3x3& toXYZ, const SkFloat3& toXYZOffset); |
+ SkColorSpace(SkColorLookUpTable colorLUT, const SkFloat3& gamma, const SkFloat3x3& toXYZ, |
+ const SkFloat3& toXYZOffset); |
const SkColorLookUpTable fColorLUT; |
- const SkGammas fGammas; |
+ const SkFloat3 fGamma; |
const SkFloat3x3 fToXYZD50; |
const SkFloat3 fToXYZOffset; |