diff options
author | Mike Reed <reed@google.com> | 2018-02-01 11:24:53 -0500 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2018-02-01 18:19:00 +0000 |
commit | 28eaed254dcd73b42c15b73528f349cccd7797e5 (patch) | |
tree | a344776f400032405b2496eb158a6912d01ea8e0 /src/effects/SkShaderMaskFilter.cpp | |
parent | 48825b11ad25c98b9a4884d5cc0edd4e290c4409 (diff) |
add gpu impl for shadermaskfilter
adds MulChildAlphaByInput
renames MulOutputByInputAlpha --> MulChildByInputAlpha
Bug: skia:7500
Change-Id: Ic0615d4d23a887fbee510901ed77a36f98a1b11d
Reviewed-on: https://skia-review.googlesource.com/102440
Reviewed-by: Brian Salomon <bsalomon@google.com>
Commit-Queue: Mike Reed <reed@google.com>
Diffstat (limited to 'src/effects/SkShaderMaskFilter.cpp')
-rw-r--r-- | src/effects/SkShaderMaskFilter.cpp | 21 |
1 files changed, 20 insertions, 1 deletions
diff --git a/src/effects/SkShaderMaskFilter.cpp b/src/effects/SkShaderMaskFilter.cpp index f2088fce72..74352acb65 100644 --- a/src/effects/SkShaderMaskFilter.cpp +++ b/src/effects/SkShaderMaskFilter.cpp @@ -9,7 +9,7 @@ #include "SkMaskFilterBase.h" #include "SkReadBuffer.h" #include "SkShaderMaskFilter.h" -#include "SkShader.h" +#include "SkShaderBase.h" #include "SkString.h" class SkShaderMF : public SkMaskFilterBase { @@ -30,6 +30,12 @@ public: SK_TO_STRING_OVERRIDE() SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkShaderMF) +protected: +#if SK_SUPPORT_GPU + std::unique_ptr<GrFragmentProcessor> onAsFragmentProcessor(const GrFPArgs&) const override; + bool onHasFragmentProcessor() const override; +#endif + private: sk_sp<SkShader> fShader; @@ -108,6 +114,19 @@ bool SkShaderMF::filterMask(SkMask* dst, const SkMask& src, const SkMatrix& ctm, } /////////////////////////////////////////////////////////////////////////////////////////////////// +#if SK_SUPPORT_GPU +#include "GrFragmentProcessor.h" + +std::unique_ptr<GrFragmentProcessor> SkShaderMF::onAsFragmentProcessor(const GrFPArgs& args) const { + return GrFragmentProcessor::MulInputByChildAlpha(as_SB(fShader)->asFragmentProcessor(args)); +} + +bool SkShaderMF::onHasFragmentProcessor() const { + return true; +} + +#endif +/////////////////////////////////////////////////////////////////////////////////////////////////// sk_sp<SkMaskFilter> SkShaderMaskFilter::Make(sk_sp<SkShader> shader) { return shader ? sk_sp<SkMaskFilter>(new SkShaderMF(std::move(shader))) : nullptr; |