| Index: src/effects/SkMorphologyImageFilter.cpp
|
| diff --git a/src/effects/SkMorphologyImageFilter.cpp b/src/effects/SkMorphologyImageFilter.cpp
|
| index 2a0f078c053fd6ed0cc13577668090b7415a6c1c..9e87fe04a41a4c00dbc41898277e0b7d7460e69f 100644
|
| --- a/src/effects/SkMorphologyImageFilter.cpp
|
| +++ b/src/effects/SkMorphologyImageFilter.cpp
|
| @@ -478,18 +478,26 @@
|
| SkASSERT(srcTexture);
|
|
|
| // setup new clip
|
| - const GrClip clip(SkRect::MakeWH(SkIntToScalar(srcTexture->width()),
|
| - SkIntToScalar(srcTexture->height())));
|
| -
|
| - const SkIRect dstRect = SkIRect::MakeWH(rect.width(), rect.height());
|
| + GrClip clip(SkRect::MakeWH(SkIntToScalar(srcTexture->width()),
|
| + SkIntToScalar(srcTexture->height())));
|
| +
|
| + SkIRect dstRect = SkIRect::MakeWH(rect.width(), rect.height());
|
| + GrSurfaceDesc desc;
|
| + desc.fFlags = kRenderTarget_GrSurfaceFlag;
|
| + desc.fWidth = rect.width();
|
| + desc.fHeight = rect.height();
|
| + desc.fConfig = kSkia8888_GrPixelConfig;
|
| SkIRect srcRect = rect;
|
|
|
| SkASSERT(radius.width() > 0 || radius.height() > 0);
|
|
|
| if (radius.fWidth > 0) {
|
| - sk_sp<GrDrawContext> dstDrawContext(context->newDrawContext(GrContext::kLoose_BackingFit,
|
| - rect.width(), rect.height(),
|
| - kSkia8888_GrPixelConfig));
|
| + GrTexture* scratch = context->textureProvider()->createApproxTexture(desc);
|
| + if (!scratch) {
|
| + return nullptr;
|
| + }
|
| + sk_sp<GrDrawContext> dstDrawContext(
|
| + context->drawContext(sk_ref_sp(scratch->asRenderTarget())));
|
| if (!dstDrawContext) {
|
| return nullptr;
|
| }
|
| @@ -499,18 +507,21 @@
|
| Gr1DKernelEffect::kX_Direction);
|
| SkIRect clearRect = SkIRect::MakeXYWH(dstRect.fLeft, dstRect.fBottom,
|
| dstRect.width(), radius.fHeight);
|
| - GrColor clearColor = GrMorphologyEffect::kErode_MorphologyType == morphType
|
| - ? SK_ColorWHITE
|
| - : SK_ColorTRANSPARENT;
|
| + GrColor clearColor = GrMorphologyEffect::kErode_MorphologyType == morphType ?
|
| + SK_ColorWHITE :
|
| + SK_ColorTRANSPARENT;
|
| dstDrawContext->clear(&clearRect, clearColor, false);
|
|
|
| - srcTexture = dstDrawContext->asTexture();
|
| + srcTexture.reset(scratch);
|
| srcRect = dstRect;
|
| }
|
| if (radius.fHeight > 0) {
|
| - sk_sp<GrDrawContext> dstDrawContext(context->newDrawContext(GrContext::kLoose_BackingFit,
|
| - rect.width(), rect.height(),
|
| - kSkia8888_GrPixelConfig));
|
| + GrTexture* scratch = context->textureProvider()->createApproxTexture(desc);
|
| + if (!scratch) {
|
| + return nullptr;
|
| + }
|
| + sk_sp<GrDrawContext> dstDrawContext(
|
| + context->drawContext(sk_ref_sp(scratch->asRenderTarget())));
|
| if (!dstDrawContext) {
|
| return nullptr;
|
| }
|
| @@ -519,7 +530,7 @@
|
| srcRect, dstRect, radius.fHeight, morphType,
|
| Gr1DKernelEffect::kY_Direction);
|
|
|
| - srcTexture = dstDrawContext->asTexture();
|
| + srcTexture.reset(scratch);
|
| }
|
|
|
| return SkSpecialImage::MakeFromGpu(SkIRect::MakeWH(rect.width(), rect.height()),
|
|
|