add gamma value to deviceproperties
BUG=skia: Review URL: https://codereview.chromium.org/652273002
This commit is contained in:
parent
5940f952b2
commit
b2d77e4d74
@ -58,7 +58,7 @@ const SkBitmap& SkBaseDevice::accessBitmap(bool changePixels) {
|
||||
}
|
||||
|
||||
void SkBaseDevice::setPixelGeometry(SkPixelGeometry geo) {
|
||||
fLeakyProperties->fPixelGeometry = geo;
|
||||
fLeakyProperties->setPixelGeometry(geo);
|
||||
}
|
||||
|
||||
SkSurface* SkBaseDevice::newSurface(const SkImageInfo&, const SkSurfaceProps&) { return NULL; }
|
||||
|
@ -14,13 +14,27 @@ struct SkDeviceProperties {
|
||||
enum InitType {
|
||||
kLegacyLCD_InitType
|
||||
};
|
||||
SkDeviceProperties(InitType) : fPixelGeometry(SkSurfacePropsDefaultPixelGeometry()) {}
|
||||
SkDeviceProperties(SkPixelGeometry geo) : fPixelGeometry(geo) {}
|
||||
|
||||
SkDeviceProperties(InitType, float gamma = SK_GAMMA_EXPONENT)
|
||||
: fGamma(gamma)
|
||||
, fPixelGeometry(SkSurfacePropsDefaultPixelGeometry())
|
||||
{}
|
||||
|
||||
SkDeviceProperties(SkPixelGeometry geo, float gamma = SK_GAMMA_EXPONENT)
|
||||
: fGamma(gamma)
|
||||
, fPixelGeometry(geo)
|
||||
{}
|
||||
|
||||
SkPixelGeometry pixelGeometry() const { return fPixelGeometry; }
|
||||
float gamma() const { return fGamma; }
|
||||
|
||||
void setPixelGeometry(SkPixelGeometry geo) {
|
||||
fPixelGeometry = geo;
|
||||
}
|
||||
|
||||
private:
|
||||
const float fGamma;
|
||||
SkPixelGeometry fPixelGeometry;
|
||||
|
||||
// read-only attribute -- until we actually store a value (future CL)
|
||||
float getGamma() const { return SK_GAMMA_EXPONENT; }
|
||||
};
|
||||
|
||||
#endif
|
||||
|
@ -1469,7 +1469,7 @@ void SkScalerContext::MakeRec(const SkPaint& paint,
|
||||
flags |= SkScalerContext::kGenA8FromLCD_Flag;
|
||||
} else {
|
||||
SkPixelGeometry geometry = deviceProperties
|
||||
? deviceProperties->fPixelGeometry
|
||||
? deviceProperties->pixelGeometry()
|
||||
: SkSurfacePropsDefaultPixelGeometry();
|
||||
switch (geometry) {
|
||||
case kUnknown_SkPixelGeometry:
|
||||
@ -1520,13 +1520,13 @@ void SkScalerContext::MakeRec(const SkPaint& paint,
|
||||
rec->setDeviceGamma(SK_GAMMA_EXPONENT);
|
||||
rec->setPaintGamma(SK_GAMMA_EXPONENT);
|
||||
} else {
|
||||
rec->setDeviceGamma(deviceProperties->getGamma());
|
||||
rec->setDeviceGamma(deviceProperties->gamma());
|
||||
|
||||
//For now always set the paint gamma equal to the device gamma.
|
||||
//The math in SkMaskGamma can handle them being different,
|
||||
//but it requires superluminous masks when
|
||||
//Ex : deviceGamma(x) < paintGamma(x) and x is sufficiently large.
|
||||
rec->setPaintGamma(deviceProperties->getGamma());
|
||||
rec->setPaintGamma(deviceProperties->gamma());
|
||||
}
|
||||
|
||||
#ifdef SK_GAMMA_CONTRAST
|
||||
|
@ -169,8 +169,8 @@ static void setup_gamma_texture(GrContext* context, const SkGlyphCache* cache,
|
||||
#else
|
||||
SkScalar contrast = 0.5f;
|
||||
#endif
|
||||
SkScalar paintGamma = deviceProperties.getGamma();
|
||||
SkScalar deviceGamma = deviceProperties.getGamma();
|
||||
SkScalar paintGamma = deviceProperties.gamma();
|
||||
SkScalar deviceGamma = deviceProperties.gamma();
|
||||
|
||||
size = SkScalerContext::GetGammaLUTSize(contrast, paintGamma, deviceGamma,
|
||||
&width, &height);
|
||||
@ -358,7 +358,7 @@ void GrDistanceFieldTextContext::setupCoverageEffect(const SkColor& filteredColo
|
||||
flags |= fUseLCDText ? kUseLCD_DistanceFieldEffectFlag : 0;
|
||||
flags |= fUseLCDText && ctm.rectStaysRect() ?
|
||||
kRectToRect_DistanceFieldEffectFlag : 0;
|
||||
bool useBGR = SkPixelGeometryIsBGR(fDeviceProperties.fPixelGeometry);
|
||||
bool useBGR = SkPixelGeometryIsBGR(fDeviceProperties.pixelGeometry());
|
||||
flags |= fUseLCDText && useBGR ? kBGR_DistanceFieldEffectFlag : 0;
|
||||
|
||||
// see if we need to create a new effect
|
||||
@ -375,7 +375,7 @@ void GrDistanceFieldTextContext::setupCoverageEffect(const SkColor& filteredColo
|
||||
flags));
|
||||
} else {
|
||||
#ifdef SK_GAMMA_APPLY_TO_A8
|
||||
U8CPU lum = SkColorSpaceLuminance::computeLuminance(fDeviceProperties.getGamma(),
|
||||
U8CPU lum = SkColorSpaceLuminance::computeLuminance(fDeviceProperties.gamma(),
|
||||
filteredColor);
|
||||
fCachedGeometryProcessor.reset(GrDistanceFieldTextureEffect::Create(fCurrTexture,
|
||||
params,
|
||||
|
Loading…
Reference in New Issue
Block a user