blob: a6274c7823ad4438ef996e338dc89e6b522282b5 [file] [log] [blame]
/*
* Copyright 2016 Google Inc.
*
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
#ifndef SkColorSpacePriv_DEFINED
#define SkColorSpacePriv_DEFINED
struct SkGammaCurve {
bool isValue() const {
bool result = (0.0f != fValue);
SkASSERT(!result || (0 == fTableSize));
SkASSERT(!result || (0.0f == fG));
return result;
}
bool isTable() const {
bool result = (0 != fTableSize);
SkASSERT(!result || (0.0f == fValue));
SkASSERT(!result || (0.0f == fG));
SkASSERT(!result || fTable);
return result;
}
bool isParametric() const {
bool result = (0.0f != fG);
SkASSERT(!result || (0.0f == fValue));
SkASSERT(!result || (0 == fTableSize));
return result;
}
// 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:
// Y = (aX + b)^g + c for X >= d
// Y = eX + f otherwise
float fG;
float fA;
float fB;
float fC;
float fD;
float fE;
float fF;
SkGammaCurve() {
memset(this, 0, sizeof(struct SkGammaCurve));
}
SkGammaCurve(float value)
: fValue(value)
, fTableSize(0)
, fTable(nullptr)
, fG(0.0f)
, fA(0.0f)
, fB(0.0f)
, fC(0.0f)
, fD(0.0f)
, fE(0.0f)
, fF(0.0f)
{}
};
struct SkGammas : public SkRefCnt {
public:
bool isValues() const {
return fRed.isValue() && fGreen.isValue() && fBlue.isValue();
}
const SkGammaCurve fRed;
const SkGammaCurve fGreen;
const SkGammaCurve fBlue;
SkGammas(float red, float green, float blue)
: fRed(red)
, fGreen(green)
, fBlue(blue)
{}
SkGammas(SkGammaCurve red, SkGammaCurve green, SkGammaCurve blue)
: fRed(std::move(red))
, fGreen(std::move(green))
, fBlue(std::move(blue))
{}
SkGammas() {}
friend class SkColorSpace;
};
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));
}
};
#endif