aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorGravatar Mike Reed <reed@google.com>2018-01-19 14:03:47 -0500
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2018-01-19 19:39:16 +0000
commita99b39399522658d7e5ddee97d0e45aa9fceaf89 (patch)
tree7c4cdcee7ecf4b152933382604793daa94f95b1b /src
parentc22e50bd317fe3658445c04e18a6e319d746c510 (diff)
use GrFPArgs for maskfilters
Bug: skia: Change-Id: I8516a3b0f6d8301c51f0861c65b9fe8f692fc5e5 Reviewed-on: https://skia-review.googlesource.com/97260 Commit-Queue: Mike Reed <reed@google.com> Reviewed-by: Brian Salomon <bsalomon@google.com>
Diffstat (limited to 'src')
-rw-r--r--src/core/SkMaskFilter.cpp19
-rw-r--r--src/effects/SkRRectsGaussianEdgeMaskFilter.cpp17
-rw-r--r--src/gpu/GrBlurUtils.cpp2
-rw-r--r--src/gpu/SkGpuDevice.cpp6
-rw-r--r--src/gpu/SkGr.cpp10
5 files changed, 37 insertions, 17 deletions
diff --git a/src/core/SkMaskFilter.cpp b/src/core/SkMaskFilter.cpp
index fb6d47bffe..b8aadec10c 100644
--- a/src/core/SkMaskFilter.cpp
+++ b/src/core/SkMaskFilter.cpp
@@ -17,6 +17,7 @@
#if SK_SUPPORT_GPU
#include "GrTextureProxy.h"
+#include "GrFragmentProcessor.h"
#endif
SkMaskFilter::NinePatch::~NinePatch() {
@@ -301,6 +302,24 @@ SkMaskFilter::filterRectsToNine(const SkRect[], int count, const SkMatrix&,
}
#if SK_SUPPORT_GPU
+std::unique_ptr<GrFragmentProcessor> SkMaskFilter::asFragmentProcessor(const GrFPArgs& args) const {
+ auto fp = this->onAsFragmentProcessor(args);
+ if (fp) {
+ SkASSERT(this->hasFragmentProcessor());
+ } else {
+ SkASSERT(!this->hasFragmentProcessor());
+ }
+ return fp;
+}
+bool SkMaskFilter::hasFragmentProcessor() const {
+ return this->onHasFragmentProcessor();
+}
+
+std::unique_ptr<GrFragmentProcessor> SkMaskFilter::onAsFragmentProcessor(const GrFPArgs&) const {
+ return nullptr;
+}
+bool SkMaskFilter::onHasFragmentProcessor() const { return false; }
+
bool SkMaskFilter::canFilterMaskGPU(const SkRRect& devRRect,
const SkIRect& clipBounds,
const SkMatrix& ctm,
diff --git a/src/effects/SkRRectsGaussianEdgeMaskFilter.cpp b/src/effects/SkRRectsGaussianEdgeMaskFilter.cpp
index 27bf09fd7c..09739c0813 100644
--- a/src/effects/SkRRectsGaussianEdgeMaskFilter.cpp
+++ b/src/effects/SkRRectsGaussianEdgeMaskFilter.cpp
@@ -32,16 +32,17 @@ public:
bool filterMask(SkMask* dst, const SkMask& src, const SkMatrix&,
SkIPoint* margin) const override;
-#if SK_SUPPORT_GPU
- bool asFragmentProcessor(GrFragmentProcessor**) const override;
-#endif
-
SK_TO_STRING_OVERRIDE()
SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkRRectsGaussianEdgeMaskFilterImpl)
protected:
void flatten(SkWriteBuffer&) const override;
+#if SK_SUPPORT_GPU
+ std::unique_ptr<GrFragmentProcessor> onAsFragmentProcessor(const GrFPArgs& args) const override;
+ bool onHasFragmentProcessor() const override { return true; }
+#endif
+
private:
SkRRect fFirst;
SkRRect fSecond;
@@ -509,12 +510,10 @@ private:
};
////////////////////////////////////////////////////////////////////////////
-bool SkRRectsGaussianEdgeMaskFilterImpl::asFragmentProcessor(GrFragmentProcessor** fp) const {
- if (fp) {
- *fp = RRectsGaussianEdgeFP::Make(fFirst, fSecond, fRadius).release();
- }
- return true;
+std::unique_ptr<GrFragmentProcessor>
+SkRRectsGaussianEdgeMaskFilterImpl::onAsFragmentProcessor(const GrFPArgs& args) const {
+ return RRectsGaussianEdgeFP::Make(fFirst, fSecond, fRadius);
}
#endif
diff --git a/src/gpu/GrBlurUtils.cpp b/src/gpu/GrBlurUtils.cpp
index dcd4a99ece..aff3647f6c 100644
--- a/src/gpu/GrBlurUtils.cpp
+++ b/src/gpu/GrBlurUtils.cpp
@@ -298,7 +298,7 @@ void GrBlurUtils::drawPathWithMaskFilter(GrContext* context,
}
GrAA aa = GrAA(paint.isAntiAlias());
SkMaskFilter* mf = paint.getMaskFilter();
- if (mf && !mf->asFragmentProcessor(nullptr)) {
+ if (mf && !mf->hasFragmentProcessor()) {
// The MaskFilter wasn't already handled in SkPaintToGrPaint
draw_path_with_mask_filter(context, renderTargetContext, clip, std::move(grPaint), aa,
viewMatrix, mf, style, path, pathIsMutable);
diff --git a/src/gpu/SkGpuDevice.cpp b/src/gpu/SkGpuDevice.cpp
index 8d6e55c1f6..3f7dcb41e0 100644
--- a/src/gpu/SkGpuDevice.cpp
+++ b/src/gpu/SkGpuDevice.cpp
@@ -403,8 +403,10 @@ void SkGpuDevice::drawRRect(const SkRRect& rrect, const SkPaint& paint) {
}
SkMaskFilter* mf = paint.getMaskFilter();
- if (mf && mf->asFragmentProcessor(nullptr)) {
- mf = nullptr; // already handled in SkPaintToGrPaint
+ if (mf) {
+ if (mf->hasFragmentProcessor()) {
+ mf = nullptr; // already handled in SkPaintToGrPaint
+ }
}
GrStyle style(paint);
diff --git a/src/gpu/SkGr.cpp b/src/gpu/SkGr.cpp
index 58dbb10df0..9342cd676b 100644
--- a/src/gpu/SkGr.cpp
+++ b/src/gpu/SkGr.cpp
@@ -375,6 +375,8 @@ static inline bool skpaint_to_grpaint_impl(GrContext* context,
// Convert SkPaint color to 4f format, including optional linearizing and gamut conversion.
GrColor4f origColor = SkColorToUnpremulGrColor4f(skPaint.getColor(), colorSpaceInfo);
+ const GrFPArgs fpArgs(context, &viewM, nullptr, skPaint.getFilterQuality(), &colorSpaceInfo);
+
// Setup the initial color considering the shader, the SkPaint color, and the presence or not
// of per-vertex colors.
std::unique_ptr<GrFragmentProcessor> shaderFP;
@@ -382,8 +384,7 @@ static inline bool skpaint_to_grpaint_impl(GrContext* context,
if (shaderProcessor) {
shaderFP = std::move(*shaderProcessor);
} else if (const auto* shader = as_SB(skPaint.getShader())) {
- shaderFP = shader->asFragmentProcessor(GrFPArgs(
- context, &viewM, nullptr, skPaint.getFilterQuality(), &colorSpaceInfo));
+ shaderFP = shader->asFragmentProcessor(fpArgs);
}
}
@@ -478,9 +479,8 @@ static inline bool skpaint_to_grpaint_impl(GrContext* context,
SkMaskFilter* maskFilter = skPaint.getMaskFilter();
if (maskFilter) {
- GrFragmentProcessor* mfFP;
- if (maskFilter->asFragmentProcessor(&mfFP)) {
- grPaint->addCoverageFragmentProcessor(std::unique_ptr<GrFragmentProcessor>(mfFP));
+ if (auto mfFP = maskFilter->asFragmentProcessor(fpArgs)) {
+ grPaint->addCoverageFragmentProcessor(std::move(mfFP));
}
}