Index: src/effects/SkAlphaThresholdFilter.cpp |
diff --git a/src/effects/SkAlphaThresholdFilter.cpp b/src/effects/SkAlphaThresholdFilter.cpp |
index cec45ba9114243cb9ba768ee9b7585226e216604..bfbcfd21f8b959e8acfeeab9fc0c0e41a032457c 100644 |
--- a/src/effects/SkAlphaThresholdFilter.cpp |
+++ b/src/effects/SkAlphaThresholdFilter.cpp |
@@ -95,16 +95,24 @@ |
sk_sp<GrTexture> SkAlphaThresholdFilterImpl::createMaskTexture(GrContext* context, |
const SkMatrix& inMatrix, |
const SkIRect& bounds) const { |
- GrPixelConfig config; |
+ GrSurfaceDesc maskDesc; |
if (context->caps()->isConfigRenderable(kAlpha_8_GrPixelConfig, false)) { |
- config = kAlpha_8_GrPixelConfig; |
+ maskDesc.fConfig = kAlpha_8_GrPixelConfig; |
} else { |
- config = kRGBA_8888_GrPixelConfig; |
- } |
- |
- sk_sp<GrDrawContext> drawContext(context->newDrawContext(GrContext::kLoose_BackingFit, |
- bounds.width(), bounds.height(), |
- config)); |
+ maskDesc.fConfig = kRGBA_8888_GrPixelConfig; |
+ } |
+ maskDesc.fFlags = kRenderTarget_GrSurfaceFlag; |
+ // Add one pixel of border to ensure that clamp mode will be all zeros |
+ // the outside. |
+ maskDesc.fWidth = bounds.width(); |
+ maskDesc.fHeight = bounds.height(); |
+ sk_sp<GrTexture> maskTexture(context->textureProvider()->createApproxTexture(maskDesc)); |
+ if (!maskTexture) { |
+ return nullptr; |
+ } |
+ |
+ sk_sp<GrDrawContext> drawContext( |
+ context->drawContext(sk_ref_sp(maskTexture->asRenderTarget()))); |
if (!drawContext) { |
return nullptr; |
} |
@@ -121,7 +129,7 @@ |
iter.next(); |
} |
- return drawContext->asTexture(); |
+ return maskTexture; |
} |
#endif |