Index: src/effects/SkAlphaThresholdFilter.cpp |
diff --git a/src/effects/SkAlphaThresholdFilter.cpp b/src/effects/SkAlphaThresholdFilter.cpp |
index b1c8b214609af956510482517706792a6f8ec079..43751e1199926a20dea6257b423f9f317862b79b 100644 |
--- a/src/effects/SkAlphaThresholdFilter.cpp |
+++ b/src/effects/SkAlphaThresholdFilter.cpp |
@@ -16,8 +16,9 @@ |
#if SK_SUPPORT_GPU |
#include "GrAlphaThresholdFragmentProcessor.h" |
#include "GrContext.h" |
-#include "GrRenderTargetContext.h" |
#include "GrFixedClip.h" |
+#include "GrRenderTargetContext.h" |
+#include "GrTextureProxy.h" |
#endif |
class SK_API SkAlphaThresholdFilterImpl : public SkImageFilter { |
@@ -37,7 +38,9 @@ protected: |
SkIPoint* offset) const override; |
#if SK_SUPPORT_GPU |
- sk_sp<GrTexture> createMaskTexture(GrContext*, const SkMatrix&, const SkIRect& bounds) const; |
+ sk_sp<GrTextureProxy> createMaskTexture(GrContext*, |
+ const SkMatrix&, |
+ const SkIRect& bounds) const; |
#endif |
private: |
@@ -93,29 +96,29 @@ SkAlphaThresholdFilterImpl::SkAlphaThresholdFilterImpl(const SkRegion& region, |
} |
#if SK_SUPPORT_GPU |
-sk_sp<GrTexture> SkAlphaThresholdFilterImpl::createMaskTexture(GrContext* context, |
- const SkMatrix& inMatrix, |
- const SkIRect& bounds) const { |
+sk_sp<GrTextureProxy> SkAlphaThresholdFilterImpl::createMaskTexture(GrContext* context, |
+ const SkMatrix& inMatrix, |
+ const SkIRect& bounds) const { |
- sk_sp<GrRenderTargetContext> renderTargetContext(context->makeRenderTargetContextWithFallback( |
+ sk_sp<GrRenderTargetContext> rtContext(context->makeDeferredRenderTargetContextWithFallback( |
SkBackingFit::kApprox, bounds.width(), bounds.height(), kAlpha_8_GrPixelConfig, nullptr)); |
- if (!renderTargetContext) { |
+ if (!rtContext) { |
return nullptr; |
} |
GrPaint grPaint; |
grPaint.setPorterDuffXPFactory(SkBlendMode::kSrc); |
SkRegion::Iterator iter(fRegion); |
- renderTargetContext->clear(nullptr, 0x0, true); |
+ rtContext->clear(nullptr, 0x0, true); |
GrFixedClip clip(SkIRect::MakeWH(bounds.width(), bounds.height())); |
while (!iter.done()) { |
SkRect rect = SkRect::Make(iter.rect()); |
- renderTargetContext->drawRect(clip, grPaint, inMatrix, rect); |
+ rtContext->drawRect(clip, grPaint, inMatrix, rect); |
iter.next(); |
} |
- return renderTargetContext->asTexture(); |
+ return sk_ref_sp(rtContext->asDeferredTexture()); |
} |
#endif |
@@ -158,21 +161,26 @@ sk_sp<SkSpecialImage> SkAlphaThresholdFilterImpl::onFilterImage(SkSpecialImage* |
SkMatrix matrix(ctx.ctm()); |
matrix.postTranslate(SkIntToScalar(-bounds.left()), SkIntToScalar(-bounds.top())); |
- sk_sp<GrTexture> maskTexture(this->createMaskTexture(context, matrix, bounds)); |
- if (!maskTexture) { |
+ sk_sp<GrTextureProxy> maskProxy(this->createMaskTexture(context, matrix, bounds)); |
+ if (!maskProxy) { |
return nullptr; |
} |
const OutputProperties& outProps = ctx.outputProperties(); |
sk_sp<GrColorSpaceXform> colorSpaceXform = GrColorSpaceXform::Make(input->getColorSpace(), |
outProps.colorSpace()); |
+ |
+ GrTexture* maskTex = maskProxy->instantiate(context->textureProvider()); |
+ if (!maskTex) { |
+ return nullptr; |
+ } |
sk_sp<GrFragmentProcessor> fp(GrAlphaThresholdFragmentProcessor::Make( |
- inputTexture.get(), |
- std::move(colorSpaceXform), |
- maskTexture.get(), |
- fInnerThreshold, |
- fOuterThreshold, |
- bounds)); |
+ inputTexture.get(), |
+ std::move(colorSpaceXform), |
+ maskTex, |
+ fInnerThreshold, |
+ fOuterThreshold, |
+ bounds)); |
if (!fp) { |
return nullptr; |
} |