aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/core
diff options
context:
space:
mode:
authorGravatar reed <reed@google.com>2016-01-24 11:15:14 -0800
committerGravatar Commit bot <commit-bot@chromium.org>2016-01-24 11:15:14 -0800
commit3b69b82b22ba854f9a8e9f1ccb54f0d9022c0bd8 (patch)
tree5f87d06c8420e41f3b2595b5f401f7188367f3b3 /src/core
parent7f225cf32e63e565b5ba584241672f58b48a9acb (diff)
add 4f support to colorfiltershader
Diffstat (limited to 'src/core')
-rw-r--r--src/core/SkColorFilterShader.cpp15
-rw-r--r--src/core/SkColorFilterShader.h3
2 files changed, 16 insertions, 2 deletions
diff --git a/src/core/SkColorFilterShader.cpp b/src/core/SkColorFilterShader.cpp
index dc90f95762..81123f6dff 100644
--- a/src/core/SkColorFilterShader.cpp
+++ b/src/core/SkColorFilterShader.cpp
@@ -43,10 +43,15 @@ uint32_t SkColorFilterShader::FilterShaderContext::getFlags() const {
uint32_t shaderF = fShaderContext->getFlags();
uint32_t filterF = filterShader.fFilter->getFlags();
- // if the filter might change alpha, clear the opaque flag in the shader
+ // If the filter does not support a given feature, but sure to clear the corresponding flag
+ // in the shader flags.
+ //
if (!(filterF & SkColorFilter::kAlphaUnchanged_Flag)) {
shaderF &= ~SkShader::kOpaqueAlpha_Flag;
}
+ if (!(filterF & SkColorFilter::kSupports4f_Flag)) {
+ shaderF &= ~SkShader::kSupports4f_Flag;
+ }
return shaderF;
}
@@ -84,6 +89,14 @@ void SkColorFilterShader::FilterShaderContext::shadeSpan(int x, int y, SkPMColor
filterShader.fFilter->filterSpan(result, count, result);
}
+void SkColorFilterShader::FilterShaderContext::shadeSpan4f(int x, int y, SkPM4f result[],
+ int count) {
+ const SkColorFilterShader& filterShader = static_cast<const SkColorFilterShader&>(fShader);
+
+ fShaderContext->shadeSpan4f(x, y, result, count);
+ filterShader.fFilter->filterSpan4f(result, count, result);
+}
+
#if SK_SUPPORT_GPU
/////////////////////////////////////////////////////////////////////
diff --git a/src/core/SkColorFilterShader.h b/src/core/SkColorFilterShader.h
index e92908ee83..55625b6991 100644
--- a/src/core/SkColorFilterShader.h
+++ b/src/core/SkColorFilterShader.h
@@ -33,7 +33,8 @@ public:
uint32_t getFlags() const override;
void shadeSpan(int x, int y, SkPMColor[], int count) override;
-
+ void shadeSpan4f(int x, int y, SkPM4f[], int count) override;
+
void set3DMask(const SkMask* mask) override {
// forward to our proxy
fShaderContext->set3DMask(mask);