Index: src/effects/SkBlurMaskFilter.cpp |
diff --git a/src/effects/SkBlurMaskFilter.cpp b/src/effects/SkBlurMaskFilter.cpp |
index 402641c980403a4f5b752d66a332039be7b7ade7..5ae03e4a2f8c21c50a2dd535e1af4f19d4c6d22d 100644 |
--- a/src/effects/SkBlurMaskFilter.cpp |
+++ b/src/effects/SkBlurMaskFilter.cpp |
@@ -40,34 +40,35 @@ public: |
// overrides from SkMaskFilter |
SkMask::Format getFormat() const override; |
- virtual bool filterMask(SkMask* dst, const SkMask& src, const SkMatrix&, |
- SkIPoint* margin) const override; |
+ bool filterMask(SkMask* dst, const SkMask& src, const SkMatrix&, |
+ SkIPoint* margin) const override; |
#if SK_SUPPORT_GPU |
- virtual bool canFilterMaskGPU(const SkRect& devBounds, |
- const SkIRect& clipBounds, |
- const SkMatrix& ctm, |
- SkRect* maskRect) const override; |
- virtual bool directFilterMaskGPU(GrContext* context, |
- GrRenderTarget* rt, |
- GrPaint* grp, |
- const GrClip&, |
- const SkMatrix& viewMatrix, |
- const SkStrokeRec& strokeRec, |
- const SkPath& path) const override; |
- virtual bool directFilterRRectMaskGPU(GrContext* context, |
- GrRenderTarget* rt, |
- GrPaint* grp, |
- const GrClip&, |
- const SkMatrix& viewMatrix, |
- const SkStrokeRec& strokeRec, |
- const SkRRect& rrect) const override; |
- |
- virtual bool filterMaskGPU(GrTexture* src, |
- const SkMatrix& ctm, |
- const SkRect& maskRect, |
- GrTexture** result, |
- bool canOverwriteSrc) const override; |
+ bool canFilterMaskGPU(const SkRect& devBounds, |
+ const SkIRect& clipBounds, |
+ const SkMatrix& ctm, |
+ SkRect* maskRect) const override; |
+ bool directFilterMaskGPU(GrTextureProvider* texProvider, |
+ GrDrawContext* drawContext, |
+ GrRenderTarget* rt, |
+ GrPaint* grp, |
+ const GrClip&, |
+ const SkMatrix& viewMatrix, |
+ const SkStrokeRec& strokeRec, |
+ const SkPath& path) const override; |
+ bool directFilterRRectMaskGPU(GrTextureProvider* texProvider, |
+ GrDrawContext* drawContext, |
+ GrRenderTarget* rt, |
+ GrPaint* grp, |
+ const GrClip&, |
+ const SkMatrix& viewMatrix, |
+ const SkStrokeRec& strokeRec, |
+ const SkRRect& rrect) const override; |
+ bool filterMaskGPU(GrTexture* src, |
+ const SkMatrix& ctm, |
+ const SkRect& maskRect, |
+ GrTexture** result, |
+ bool canOverwriteSrc) const override; |
#endif |
void computeFastBounds(const SkRect&, SkRect*) const override; |
@@ -77,13 +78,13 @@ public: |
SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkBlurMaskFilterImpl) |
protected: |
- virtual FilterReturn filterRectsToNine(const SkRect[], int count, const SkMatrix&, |
- const SkIRect& clipBounds, |
- NinePatch*) const override; |
+ FilterReturn filterRectsToNine(const SkRect[], int count, const SkMatrix&, |
+ const SkIRect& clipBounds, |
+ NinePatch*) const override; |
- virtual FilterReturn filterRRectToNine(const SkRRect&, const SkMatrix&, |
- const SkIRect& clipBounds, |
- NinePatch*) const override; |
+ FilterReturn filterRRectToNine(const SkRRect&, const SkMatrix&, |
+ const SkIRect& clipBounds, |
+ NinePatch*) const override; |
bool filterRectMask(SkMask* dstM, const SkRect& r, const SkMatrix& matrix, |
SkIPoint* margin, SkMask::CreateMode createMode) const; |
@@ -830,13 +831,16 @@ GrFragmentProcessor* GrRectBlurEffect::TestCreate(GrProcessorTestData* d) { |
} |
-bool SkBlurMaskFilterImpl::directFilterMaskGPU(GrContext* context, |
+bool SkBlurMaskFilterImpl::directFilterMaskGPU(GrTextureProvider* texProvider, |
+ GrDrawContext* drawContext, |
GrRenderTarget* rt, |
GrPaint* grp, |
const GrClip& clip, |
const SkMatrix& viewMatrix, |
const SkStrokeRec& strokeRec, |
const SkPath& path) const { |
+ SkASSERT(drawContext); |
+ |
if (fBlurStyle != kNormal_SkBlurStyle) { |
return false; |
} |
@@ -850,14 +854,13 @@ bool SkBlurMaskFilterImpl::directFilterMaskGPU(GrContext* context, |
return false; |
} |
- SkMatrix ctm = viewMatrix; |
- SkScalar xformedSigma = this->computeXformedSigma(ctm); |
+ SkScalar xformedSigma = this->computeXformedSigma(viewMatrix); |
- int pad=SkScalarCeilToInt(6*xformedSigma)/2; |
+ int pad = SkScalarCeilToInt(6*xformedSigma)/2; |
rect.outset(SkIntToScalar(pad), SkIntToScalar(pad)); |
SkAutoTUnref<GrFragmentProcessor> fp(GrRectBlurEffect::Create( |
- context->textureProvider(), rect, xformedSigma)); |
+ texProvider, rect, xformedSigma)); |
if (!fp) { |
return false; |
} |
@@ -869,19 +872,14 @@ bool SkBlurMaskFilterImpl::directFilterMaskGPU(GrContext* context, |
return false; |
} |
- GrDrawContext* drawContext = context->drawContext(); |
- if (drawContext) { |
- drawContext->drawNonAARectWithLocalMatrix(rt, clip, *grp, SkMatrix::I(), rect, inverse); |
- return true; |
- } |
- |
- return false; |
+ drawContext->drawNonAARectWithLocalMatrix(rt, clip, *grp, SkMatrix::I(), rect, inverse); |
+ return true; |
} |
class GrRRectBlurEffect : public GrFragmentProcessor { |
public: |
- static GrFragmentProcessor* Create(GrContext* context, float sigma, const SkRRect&); |
+ static GrFragmentProcessor* Create(GrTextureProvider*, float sigma, const SkRRect&); |
virtual ~GrRRectBlurEffect() {}; |
const char* name() const override { return "GrRRectBlur"; } |
@@ -911,7 +909,7 @@ private: |
}; |
-GrFragmentProcessor* GrRRectBlurEffect::Create(GrContext* context, float sigma, |
+GrFragmentProcessor* GrRRectBlurEffect::Create(GrTextureProvider* texProvider, float sigma, |
const SkRRect& rrect) { |
if (!rrect.isSimpleCircular()) { |
return NULL; |
@@ -935,8 +933,7 @@ GrFragmentProcessor* GrRRectBlurEffect::Create(GrContext* context, float sigma, |
builder[1] = cornerRadius; |
builder.finish(); |
- SkAutoTUnref<GrTexture> blurNinePatchTexture( |
- context->textureProvider()->findAndRefTextureByUniqueKey(key)); |
+ SkAutoTUnref<GrTexture> blurNinePatchTexture(texProvider->findAndRefTextureByUniqueKey(key)); |
if (!blurNinePatchTexture) { |
SkMask mask; |
@@ -974,12 +971,12 @@ GrFragmentProcessor* GrRRectBlurEffect::Create(GrContext* context, float sigma, |
texDesc.fConfig = kAlpha_8_GrPixelConfig; |
blurNinePatchTexture.reset( |
- context->textureProvider()->createTexture(texDesc, true, blurredMask.fImage, 0)); |
+ texProvider->createTexture(texDesc, true, blurredMask.fImage, 0)); |
SkMask::FreeImage(blurredMask.fImage); |
if (!blurNinePatchTexture) { |
return NULL; |
} |
- context->textureProvider()->assignUniqueKeyToTexture(key, blurNinePatchTexture); |
+ texProvider->assignUniqueKeyToTexture(key, blurNinePatchTexture); |
} |
return SkNEW_ARGS(GrRRectBlurEffect, (sigma, rrect, blurNinePatchTexture)); |
} |
@@ -1013,7 +1010,7 @@ GrFragmentProcessor* GrRRectBlurEffect::TestCreate(GrProcessorTestData* d) { |
SkScalar sigma = d->fRandom->nextRangeF(1.f,10.f); |
SkRRect rrect; |
rrect.setRectXY(SkRect::MakeWH(w, h), r, r); |
- return GrRRectBlurEffect::Create(d->fContext, sigma, rrect); |
+ return GrRRectBlurEffect::Create(d->fContext->textureProvider(), sigma, rrect); |
} |
////////////////////////////////////////////////////////////////////////////// |
@@ -1123,13 +1120,16 @@ GrGLFragmentProcessor* GrRRectBlurEffect::createGLInstance() const { |
return SkNEW_ARGS(GrGLRRectBlurEffect, (*this)); |
} |
-bool SkBlurMaskFilterImpl::directFilterRRectMaskGPU(GrContext* context, |
+bool SkBlurMaskFilterImpl::directFilterRRectMaskGPU(GrTextureProvider* texProvider, |
+ GrDrawContext* drawContext, |
GrRenderTarget* rt, |
GrPaint* grp, |
const GrClip& clip, |
const SkMatrix& viewMatrix, |
const SkStrokeRec& strokeRec, |
const SkRRect& rrect) const { |
+ SkASSERT(drawContext); |
+ |
if (fBlurStyle != kNormal_SkBlurStyle) { |
return false; |
} |
@@ -1138,13 +1138,14 @@ bool SkBlurMaskFilterImpl::directFilterRRectMaskGPU(GrContext* context, |
return false; |
} |
- SkRect proxy_rect = rrect.rect(); |
- SkMatrix ctm = viewMatrix; |
- SkScalar xformedSigma = this->computeXformedSigma(ctm); |
+ SkScalar xformedSigma = this->computeXformedSigma(viewMatrix); |
float extra=3.f*SkScalarCeilToScalar(xformedSigma-1/6.0f); |
- proxy_rect.outset(extra, extra); |
- SkAutoTUnref<GrFragmentProcessor> fp(GrRRectBlurEffect::Create(context, xformedSigma, rrect)); |
+ SkRect proxyRect = rrect.rect(); |
+ proxyRect.outset(extra, extra); |
+ |
+ SkAutoTUnref<GrFragmentProcessor> fp(GrRRectBlurEffect::Create(texProvider, |
+ xformedSigma, rrect)); |
if (!fp) { |
return false; |
} |
@@ -1156,14 +1157,8 @@ bool SkBlurMaskFilterImpl::directFilterRRectMaskGPU(GrContext* context, |
return false; |
} |
- GrDrawContext* drawContext = context->drawContext(); |
- if (drawContext) { |
- drawContext->drawNonAARectWithLocalMatrix(rt, clip, *grp, SkMatrix::I(), |
- proxy_rect, inverse); |
- return true; |
- } |
- |
- return false; |
+ drawContext->drawNonAARectWithLocalMatrix(rt, clip, *grp, SkMatrix::I(), proxyRect, inverse); |
+ return true; |
} |
bool SkBlurMaskFilterImpl::canFilterMaskGPU(const SkRect& srcBounds, |