diff options
author | Robert Phillips <robertphillips@google.com> | 2018-07-13 10:23:32 +0000 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2018-07-13 10:23:45 +0000 |
commit | bc8133b4adf481edf62158f07951e06e20c2f92a (patch) | |
tree | c0ec0445b0029a663ec32371274c2c4c0056c637 | |
parent | ebd37e2af4787c13d6422e4cab700d1dc697eb94 (diff) |
Revert "update SkToSRGBColorFilter color management"
This reverts commit 8b5092671b1d0802e88b5202f67ceb94c9e5d236.
Reason for revert: Test if this broke Android roll
Original change's description:
> update SkToSRGBColorFilter color management
>
> Change-Id: Ia4a8bbc9d983bb5cfa02ba62c922efa1fa879d9b
> Reviewed-on: https://skia-review.googlesource.com/141054
> Commit-Queue: Mike Klein <mtklein@chromium.org>
> Reviewed-by: Brian Osman <brianosman@google.com>
TBR=mtklein@chromium.org,brianosman@google.com
Change-Id: Ib34bc4375447fe88a80d9b6d19dae87c4c41d0d5
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Reviewed-on: https://skia-review.googlesource.com/141180
Reviewed-by: Robert Phillips <robertphillips@google.com>
Commit-Queue: Robert Phillips <robertphillips@google.com>
-rw-r--r-- | src/effects/SkToSRGBColorFilter.cpp | 28 |
1 files changed, 24 insertions, 4 deletions
diff --git a/src/effects/SkToSRGBColorFilter.cpp b/src/effects/SkToSRGBColorFilter.cpp index 0bfa40b1d3..ba01c6b2c4 100644 --- a/src/effects/SkToSRGBColorFilter.cpp +++ b/src/effects/SkToSRGBColorFilter.cpp @@ -5,7 +5,6 @@ * found in the LICENSE file. */ -#include "SkColorSpaceXformSteps.h" #include "SkPM4fPriv.h" #include "SkRasterPipeline.h" #include "SkReadBuffer.h" @@ -21,9 +20,30 @@ void SkToSRGBColorFilter::onAppendStages(SkRasterPipeline* p, SkColorSpace* /*dst color space*/, SkArenaAlloc* alloc, bool shaderIsOpaque) const { - alloc->make<SkColorSpaceXformSteps>(fSrcColorSpace.get(), kPremul_SkAlphaType, - SkColorSpace::MakeSRGB().get()) - ->apply(p); + // Step 1: Linearize by undoing the src transfer function. + // Linear and sRGB will return true to isNumericalTransferFn(), so we check them first. + SkColorSpaceTransferFn srcFn; + if (fSrcColorSpace->gammaIsLinear()) { + // Nothing to do. + } else if (fSrcColorSpace->gammaCloseToSRGB()) { + p->append(SkRasterPipeline::from_srgb); + } else if (fSrcColorSpace->isNumericalTransferFn(&srcFn)) { + auto copy = alloc->make<SkColorSpaceTransferFn>(srcFn); + p->append(SkRasterPipeline::parametric, copy); + } else { + SkDEBUGFAIL("Looks like we got a table transfer function here, quite unexpectedly."); + // TODO: If we really need to handle this, we can, but I don't think Ganesh does. + } + + // Step 2: Transform to sRGB gamut (without clamping). + append_gamut_transform(p, + alloc, + fSrcColorSpace.get(), + SkColorSpace::MakeSRGB().get(), + kPremul_SkAlphaType); + + // Step 3: Back to sRGB encoding. + p->append(SkRasterPipeline::to_srgb); } sk_sp<SkColorFilter> SkToSRGBColorFilter::Make(sk_sp<SkColorSpace> srcColorSpace) { |