| Index: src/effects/SkMorphologyImageFilter.cpp
|
| diff --git a/src/effects/SkMorphologyImageFilter.cpp b/src/effects/SkMorphologyImageFilter.cpp
|
| index 9e87fe04a41a4c00dbc41898277e0b7d7460e69f..2a0f078c053fd6ed0cc13577668090b7415a6c1c 100644
|
| --- a/src/effects/SkMorphologyImageFilter.cpp
|
| +++ b/src/effects/SkMorphologyImageFilter.cpp
|
| @@ -478,26 +478,18 @@ static sk_sp<SkSpecialImage> apply_morphology(GrContext* context,
|
| SkASSERT(srcTexture);
|
|
|
| // setup new clip
|
| - 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;
|
| + const GrClip clip(SkRect::MakeWH(SkIntToScalar(srcTexture->width()),
|
| + SkIntToScalar(srcTexture->height())));
|
| +
|
| + const SkIRect dstRect = SkIRect::MakeWH(rect.width(), rect.height());
|
| SkIRect srcRect = rect;
|
|
|
| SkASSERT(radius.width() > 0 || radius.height() > 0);
|
|
|
| if (radius.fWidth > 0) {
|
| - GrTexture* scratch = context->textureProvider()->createApproxTexture(desc);
|
| - if (!scratch) {
|
| - return nullptr;
|
| - }
|
| - sk_sp<GrDrawContext> dstDrawContext(
|
| - context->drawContext(sk_ref_sp(scratch->asRenderTarget())));
|
| + sk_sp<GrDrawContext> dstDrawContext(context->newDrawContext(GrContext::kLoose_BackingFit,
|
| + rect.width(), rect.height(),
|
| + kSkia8888_GrPixelConfig));
|
| if (!dstDrawContext) {
|
| return nullptr;
|
| }
|
| @@ -507,21 +499,18 @@ static sk_sp<SkSpecialImage> apply_morphology(GrContext* context,
|
| 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.reset(scratch);
|
| + srcTexture = dstDrawContext->asTexture();
|
| srcRect = dstRect;
|
| }
|
| if (radius.fHeight > 0) {
|
| - GrTexture* scratch = context->textureProvider()->createApproxTexture(desc);
|
| - if (!scratch) {
|
| - return nullptr;
|
| - }
|
| - sk_sp<GrDrawContext> dstDrawContext(
|
| - context->drawContext(sk_ref_sp(scratch->asRenderTarget())));
|
| + sk_sp<GrDrawContext> dstDrawContext(context->newDrawContext(GrContext::kLoose_BackingFit,
|
| + rect.width(), rect.height(),
|
| + kSkia8888_GrPixelConfig));
|
| if (!dstDrawContext) {
|
| return nullptr;
|
| }
|
| @@ -530,7 +519,7 @@ static sk_sp<SkSpecialImage> apply_morphology(GrContext* context,
|
| srcRect, dstRect, radius.fHeight, morphType,
|
| Gr1DKernelEffect::kY_Direction);
|
|
|
| - srcTexture.reset(scratch);
|
| + srcTexture = dstDrawContext->asTexture();
|
| }
|
|
|
| return SkSpecialImage::MakeFromGpu(SkIRect::MakeWH(rect.width(), rect.height()),
|
|
|