diff options
author | 2016-01-24 11:15:14 -0800 | |
---|---|---|
committer | 2016-01-24 11:15:14 -0800 | |
commit | 3b69b82b22ba854f9a8e9f1ccb54f0d9022c0bd8 (patch) | |
tree | 5f87d06c8420e41f3b2595b5f401f7188367f3b3 /src/core | |
parent | 7f225cf32e63e565b5ba584241672f58b48a9acb (diff) |
add 4f support to colorfiltershader
BUG=skia:
GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1625263002
TBR=
Review URL: https://codereview.chromium.org/1625263002
Diffstat (limited to 'src/core')
-rw-r--r-- | src/core/SkColorFilterShader.cpp | 15 | ||||
-rw-r--r-- | src/core/SkColorFilterShader.h | 3 |
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); |