diff options
author | reed <reed@google.com> | 2016-06-10 11:41:47 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2016-06-10 11:41:47 -0700 |
commit | 6644d9353f3f0c09914385fd762e073f98d54205 (patch) | |
tree | 617f3b1d2ca2b06cc34decfb44c4c975ba903ca5 /src/core/SkBitmapController.cpp | |
parent | 7049396b65660907af5292d899053280430d929a (diff) |
respect srgb gamma when building mips
Proposed policy:
- If the target is *legacy* (e.g. L32/PMColor) ignore gamma
- If the target is S32/F16 respect gamma
BUG=skia:
GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2029373004
Review-Url: https://codereview.chromium.org/2029373004
Diffstat (limited to 'src/core/SkBitmapController.cpp')
-rw-r--r-- | src/core/SkBitmapController.cpp | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/src/core/SkBitmapController.cpp b/src/core/SkBitmapController.cpp index ac1029db81..f4ee0fb6c1 100644 --- a/src/core/SkBitmapController.cpp +++ b/src/core/SkBitmapController.cpp @@ -44,10 +44,12 @@ SkBitmapController::State* SkBitmapController::requestBitmap(const SkBitmapProvi class SkDefaultBitmapControllerState : public SkBitmapController::State { public: - SkDefaultBitmapControllerState(const SkBitmapProvider&, const SkMatrix& inv, SkFilterQuality); + SkDefaultBitmapControllerState(const SkBitmapProvider&, const SkMatrix& inv, SkFilterQuality, + SkSourceGammaTreatment); private: SkBitmap fResultBitmap; + SkSourceGammaTreatment fSrcGammaTreatment; SkAutoTUnref<const SkMipMap> fCurrMip; bool processHQRequest(const SkBitmapProvider&); @@ -164,13 +166,13 @@ bool SkDefaultBitmapControllerState::processMediumRequest(const SkBitmapProvider } if (invScaleSize.width() > SK_Scalar1 || invScaleSize.height() > SK_Scalar1) { - fCurrMip.reset(SkMipMapCache::FindAndRef(provider.makeCacheDesc())); + fCurrMip.reset(SkMipMapCache::FindAndRef(provider.makeCacheDesc(), fSrcGammaTreatment)); if (nullptr == fCurrMip.get()) { SkBitmap orig; if (!provider.asBitmap(&orig)) { return false; } - fCurrMip.reset(SkMipMapCache::AddAndRef(orig)); + fCurrMip.reset(SkMipMapCache::AddAndRef(orig, fSrcGammaTreatment)); if (nullptr == fCurrMip.get()) { return false; } @@ -200,9 +202,11 @@ bool SkDefaultBitmapControllerState::processMediumRequest(const SkBitmapProvider SkDefaultBitmapControllerState::SkDefaultBitmapControllerState(const SkBitmapProvider& provider, const SkMatrix& inv, - SkFilterQuality qual) { + SkFilterQuality qual, + SkSourceGammaTreatment treatment) { fInvMatrix = inv; fQuality = qual; + fSrcGammaTreatment = treatment; if (this->processHQRequest(provider) || this->processMediumRequest(provider)) { SkASSERT(fResultBitmap.getPixels()); @@ -223,5 +227,6 @@ SkBitmapController::State* SkDefaultBitmapController::onRequestBitmap(const SkBi const SkMatrix& inverse, SkFilterQuality quality, void* storage, size_t size) { - return SkInPlaceNewCheck<SkDefaultBitmapControllerState>(storage, size, bm, inverse, quality); + return SkInPlaceNewCheck<SkDefaultBitmapControllerState>(storage, size, bm, inverse, quality, + fSrcGammaTreatment); } |