| 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;
|
|
|
|
|