diff options
author | Mike Klein <mtklein@google.com> | 2017-06-13 00:41:52 +0000 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2017-06-13 00:42:04 +0000 |
commit | 4049dffaa8392f6cebab3dd0b9f12fd1eaef4ede (patch) | |
tree | 105a8362c69d0fc8d2445ded4a59eed571d06fd7 /src/core/SkModeColorFilter.cpp | |
parent | c8b6828d4f172f7b5735dbc5e26a33c53a54e94f (diff) |
Revert "inline common modecolorfilters"
This reverts commit c8b6828d4f172f7b5735dbc5e26a33c53a54e94f.
Reason for revert: looks like this messed up colorcomposefilter_wacky and colorcomposefilter_alpha. I suspect we're missing a swap_rb or two.
Original change's description:
> inline common modecolorfilters
>
> *seems* like we won't trigger layout tests, since chrome only uses Src, SrcIn and Modulate.
> Bug: skia:
> Change-Id: Ieae7e85bd3f2d23278b0405c2a5d64dbad1e0739
> Reviewed-on: https://skia-review.googlesource.com/19551
> Reviewed-by: Mike Klein <mtklein@chromium.org>
> Commit-Queue: Mike Klein <mtklein@chromium.org>
TBR=mtklein@chromium.org,mtklein@google.com,reed@google.com
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Bug: skia:
Change-Id: I7fc28e0f1e65c69be328ade32fbef078dbe99402
Reviewed-on: https://skia-review.googlesource.com/19555
Reviewed-by: Mike Klein <mtklein@google.com>
Commit-Queue: Mike Klein <mtklein@google.com>
Diffstat (limited to 'src/core/SkModeColorFilter.cpp')
-rw-r--r-- | src/core/SkModeColorFilter.cpp | 67 |
1 files changed, 38 insertions, 29 deletions
diff --git a/src/core/SkModeColorFilter.cpp b/src/core/SkModeColorFilter.cpp index 270cb811a3..7e93747f10 100644 --- a/src/core/SkModeColorFilter.cpp +++ b/src/core/SkModeColorFilter.cpp @@ -63,35 +63,11 @@ uint32_t SkModeColorFilter::getFlags() const { } void SkModeColorFilter::filterSpan(const SkPMColor shader[], int count, SkPMColor result[]) const { - SkPMColor color = fPMColor; + SkPMColor color = fPMColor; + SkXfermodeProc proc = SkXfermode::GetProc(fMode); - switch (fMode) { - case SkBlendMode::kSrc: - sk_memset32(result, color, count); - break; - case SkBlendMode::kSrcIn: - for (int i = 0; i < count; ++i) { - result[i] = SkAlphaMulQ(color, SkAlpha255To256(SkGetPackedA32(shader[i]))); - } - break; - case SkBlendMode::kModulate: - for (int i = 0; i < count; ++i) { - int a = SkMulDiv255Round(SkGetPackedA32(color), SkGetPackedA32(shader[i])); - int r = SkMulDiv255Round(SkGetPackedR32(color), SkGetPackedR32(shader[i])); - int g = SkMulDiv255Round(SkGetPackedG32(color), SkGetPackedG32(shader[i])); - int b = SkMulDiv255Round(SkGetPackedB32(color), SkGetPackedB32(shader[i])); - result[i] = SkPackARGB32(a, r, g, b); - } - break; - default: { - SkSTArenaAlloc<256> alloc; - SkRasterPipeline p(&alloc); - - p.append(SkRasterPipeline::load_8888, &shader); - this->appendStages(&p, nullptr, &alloc, false); - p.append(SkRasterPipeline::store_8888, &result); - p.run(0, 0, count); - } break; + for (int i = 0; i < count; i++) { + result[i] = proc(color, shader[i]); } } @@ -156,6 +132,32 @@ sk_sp<GrFragmentProcessor> SkModeColorFilter::asFragmentProcessor( /////////////////////////////////////////////////////////////////////////////// +class Src_SkModeColorFilter final : public SkModeColorFilter { +public: + Src_SkModeColorFilter(SkColor color) : INHERITED(color, SkBlendMode::kSrc) {} + + void filterSpan(const SkPMColor shader[], int count, SkPMColor result[]) const override { + sk_memset32(result, this->getPMColor(), count); + } + +private: + typedef SkModeColorFilter INHERITED; +}; + +class SrcOver_SkModeColorFilter final : public SkModeColorFilter { +public: + SrcOver_SkModeColorFilter(SkColor color) : INHERITED(color, SkBlendMode::kSrcOver) { } + + void filterSpan(const SkPMColor shader[], int count, SkPMColor result[]) const override { + SkBlitRow::Color32(result, shader, count, this->getPMColor()); + } + +private: + typedef SkModeColorFilter INHERITED; +}; + +/////////////////////////////////////////////////////////////////////////////// + sk_sp<SkColorFilter> SkColorFilter::MakeModeFilter(SkColor color, SkBlendMode mode) { if (!SkIsValidMode(mode)) { return nullptr; @@ -189,5 +191,12 @@ sk_sp<SkColorFilter> SkColorFilter::MakeModeFilter(SkColor color, SkBlendMode mo return nullptr; } - return SkModeColorFilter::Make(color, mode); + switch (mode) { + case SkBlendMode::kSrc: + return sk_make_sp<Src_SkModeColorFilter>(color); + case SkBlendMode::kSrcOver: + return sk_make_sp<SrcOver_SkModeColorFilter>(color); + default: + return SkModeColorFilter::Make(color, mode); + } } |