Refactor drawContext/RenderTarget creation
GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1914883002
Committed: https://skia.googlesource.com/skia/+/2f1c42e8448bbbadeb3df1c626faa90aa33f8907
Review-Url: https://codereview.chromium.org/1914883002
diff --git a/src/effects/SkMorphologyImageFilter.cpp b/src/effects/SkMorphologyImageFilter.cpp
index 9e87fe0..2a0f078 100644
--- a/src/effects/SkMorphologyImageFilter.cpp
+++ b/src/effects/SkMorphologyImageFilter.cpp
@@ -478,26 +478,18 @@
SkASSERT(srcTexture);
// setup new clip
- GrClip clip(SkRect::MakeWH(SkIntToScalar(srcTexture->width()),
- SkIntToScalar(srcTexture->height())));
+ const 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 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 @@
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 @@
srcRect, dstRect, radius.fHeight, morphType,
Gr1DKernelEffect::kY_Direction);
- srcTexture.reset(scratch);
+ srcTexture = dstDrawContext->asTexture();
}
return SkSpecialImage::MakeFromGpu(SkIRect::MakeWH(rect.width(), rect.height()),