diff options
author | 2016-02-04 11:35:27 -0800 | |
---|---|---|
committer | 2016-02-04 11:35:27 -0800 | |
commit | f7cdb06d62bd732599c7ee407dfd76d32d671755 (patch) | |
tree | 52cd10f9671d35d50713f6ca3156f52f5a4e687a /src/core/SkColorFilter.cpp | |
parent | eb10ed40905173586fc7a926aa2fe405bab66573 (diff) |
extend compose-colorfilter to 4f
BUG=skia:
GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1664663003
Review URL: https://codereview.chromium.org/1664663003
Diffstat (limited to 'src/core/SkColorFilter.cpp')
-rw-r--r-- | src/core/SkColorFilter.cpp | 23 |
1 files changed, 20 insertions, 3 deletions
diff --git a/src/core/SkColorFilter.cpp b/src/core/SkColorFilter.cpp index 4bfacfe544..72f5470b10 100644 --- a/src/core/SkColorFilter.cpp +++ b/src/core/SkColorFilter.cpp @@ -29,14 +29,24 @@ bool SkColorFilter::asComponentTable(SkBitmap*) const { return false; } +void SkColorFilter::filterSpan4f(const SkPM4f[], int count, SkPM4f[]) const { + if (this->supports4f()) { + SkASSERT(false && "colorfilter supports4f but didn't override"); + } else { + SkASSERT(false && "filterSpan4f called but not supported"); + } +} + SkColor SkColorFilter::filterColor(SkColor c) const { SkPMColor dst, src = SkPreMultiplyColor(c); this->filterSpan(&src, 1, &dst); return SkUnPreMultiply::PMColorToColor(dst); } -void SkColorFilter::filterSpan4f(const SkPM4f[], int count, SkPM4f[]) const { - SkASSERT(false && "filterSpan4f called but not implemented"); +SkColor4f SkColorFilter::filterColor4f(const SkColor4f& c) const { + SkPM4f dst, src = c.premul(); + this->filterSpan4f(&src, 1, &dst); + return dst.unpremul(); } /////////////////////////////////////////////////////////////////////////////////////////////////// @@ -54,7 +64,7 @@ void SkColorFilter::filterSpan4f(const SkPM4f[], int count, SkPM4f[]) const { class SkComposeColorFilter : public SkColorFilter { public: uint32_t getFlags() const override { - // Can only claim alphaunchanged and 16bit support if both our proxys do. + // Can only claim alphaunchanged and SkPM4f support if both our proxys do. return fOuter->getFlags() & fInner->getFlags(); } @@ -63,6 +73,13 @@ public: fOuter->filterSpan(result, count, result); } + void filterSpan4f(const SkPM4f shader[], int count, SkPM4f result[]) const override { + SkASSERT(fInner->supports4f()); + SkASSERT(fOuter->supports4f()); + fInner->filterSpan4f(shader, count, result); + fOuter->filterSpan4f(result, count, result); + } + #ifndef SK_IGNORE_TO_STRING void toString(SkString* str) const override { SkString outerS, innerS; |