aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/effects/SkShaderMaskFilter.cpp
diff options
context:
space:
mode:
authorGravatar Mike Reed <reed@google.com>2018-02-01 11:24:53 -0500
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2018-02-01 18:19:00 +0000
commit28eaed254dcd73b42c15b73528f349cccd7797e5 (patch)
treea344776f400032405b2496eb158a6912d01ea8e0 /src/effects/SkShaderMaskFilter.cpp
parent48825b11ad25c98b9a4884d5cc0edd4e290c4409 (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.cpp21
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;