aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/effects
diff options
context:
space:
mode:
authorGravatar Robert Phillips <robertphillips@google.com>2018-07-13 10:23:32 +0000
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2018-07-13 10:23:45 +0000
commitbc8133b4adf481edf62158f07951e06e20c2f92a (patch)
treec0ec0445b0029a663ec32371274c2c4c0056c637 /src/effects
parentebd37e2af4787c13d6422e4cab700d1dc697eb94 (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>
Diffstat (limited to 'src/effects')
-rw-r--r--src/effects/SkToSRGBColorFilter.cpp28
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) {