aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/core/SkColorFilter.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/SkColorFilter.cpp')
-rw-r--r--src/core/SkColorFilter.cpp19
1 files changed, 12 insertions, 7 deletions
diff --git a/src/core/SkColorFilter.cpp b/src/core/SkColorFilter.cpp
index a1b4043f49..9304c7c803 100644
--- a/src/core/SkColorFilter.cpp
+++ b/src/core/SkColorFilter.cpp
@@ -61,7 +61,7 @@ void SkColorFilter::onAppendStages(SkRasterPipeline* p,
ctx->fn = [](SkJumper_CallbackCtx* arg, int active_pixels) {
auto ctx = (Ctx*)arg;
auto buf = (SkPM4f*)ctx->rgba;
- ctx->cf->filterSpan4f(buf, active_pixels, buf);
+ ctx->cf->onFilterStage(buf, active_pixels, buf);
};
p->append(SkRasterPipeline::callback, ctx);
}
@@ -72,9 +72,19 @@ SkColor SkColorFilter::filterColor(SkColor c) const {
return SkUnPreMultiply::PMColorToColor(dst);
}
+#include "SkRasterPipeline.h"
SkColor4f SkColorFilter::filterColor4f(const SkColor4f& c) const {
SkPM4f dst, src = c.premul();
- this->filterSpan4f(&src, 1, &dst);
+
+ SkSTArenaAlloc<128> alloc;
+ SkRasterPipeline pipeline(&alloc);
+
+ pipeline.append(SkRasterPipeline::constant_color, &src);
+ this->onAppendStages(&pipeline, nullptr, &alloc, c.fA == 1);
+ SkPM4f* dstPtr = &dst;
+ pipeline.append(SkRasterPipeline::store_f32, &dstPtr);
+ pipeline.run(0,1);
+
return dst.unpremul();
}
@@ -102,11 +112,6 @@ public:
fOuter->filterSpan(result, count, result);
}
- void filterSpan4f(const SkPM4f shader[], int count, SkPM4f result[]) const override {
- fInner->filterSpan4f(shader, count, result);
- fOuter->filterSpan4f(result, count, result);
- }
-
#ifndef SK_IGNORE_TO_STRING
void toString(SkString* str) const override {
SkString outerS, innerS;