diff options
author | Mike Klein <mtklein@chromium.org> | 2018-07-12 13:53:35 -0400 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2018-07-12 19:19:29 +0000 |
commit | 8b5092671b1d0802e88b5202f67ceb94c9e5d236 (patch) | |
tree | 9c71d49cdb57d7ee78b397c70b47ef19622bd3fc | |
parent | 9e229233a67b36a508d3c753a5b93a022369c5f7 (diff) |
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>
-rw-r--r-- | src/effects/SkToSRGBColorFilter.cpp | 28 |
1 files changed, 4 insertions, 24 deletions
diff --git a/src/effects/SkToSRGBColorFilter.cpp b/src/effects/SkToSRGBColorFilter.cpp index ba01c6b2c4..0bfa40b1d3 100644 --- a/src/effects/SkToSRGBColorFilter.cpp +++ b/src/effects/SkToSRGBColorFilter.cpp @@ -5,6 +5,7 @@ * found in the LICENSE file. */ +#include "SkColorSpaceXformSteps.h" #include "SkPM4fPriv.h" #include "SkRasterPipeline.h" #include "SkReadBuffer.h" @@ -20,30 +21,9 @@ void SkToSRGBColorFilter::onAppendStages(SkRasterPipeline* p, SkColorSpace* /*dst color space*/, SkArenaAlloc* alloc, bool shaderIsOpaque) const { - // 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); + alloc->make<SkColorSpaceXformSteps>(fSrcColorSpace.get(), kPremul_SkAlphaType, + SkColorSpace::MakeSRGB().get()) + ->apply(p); } sk_sp<SkColorFilter> SkToSRGBColorFilter::Make(sk_sp<SkColorSpace> srcColorSpace) { |