diff options
Diffstat (limited to 'src/effects/SkXfermodeImageFilter.cpp')
-rw-r--r-- | src/effects/SkXfermodeImageFilter.cpp | 20 |
1 files changed, 6 insertions, 14 deletions
diff --git a/src/effects/SkXfermodeImageFilter.cpp b/src/effects/SkXfermodeImageFilter.cpp index b1ac1c32e0..b1e19bbec3 100644 --- a/src/effects/SkXfermodeImageFilter.cpp +++ b/src/effects/SkXfermodeImageFilter.cpp @@ -176,16 +176,6 @@ sk_sp<SkSpecialImage> SkXfermodeImageFilter::filterImageGPU(SkSpecialImage* sour foregroundTex = foreground->asTextureRef(context); } - GrSurfaceDesc desc; - desc.fFlags = kRenderTarget_GrSurfaceFlag; - desc.fWidth = bounds.width(); - desc.fHeight = bounds.height(); - desc.fConfig = kSkia8888_GrPixelConfig; - sk_sp<GrTexture> dst(context->textureProvider()->createApproxTexture(desc)); - if (!dst) { - return nullptr; - } - GrPaint paint; // SRGBTODO: AllowSRGBInputs? SkAutoTUnref<const GrFragmentProcessor> bgFP; @@ -236,11 +226,11 @@ sk_sp<SkSpecialImage> SkXfermodeImageFilter::filterImageGPU(SkSpecialImage* sour mode.reset(new SkProcCoeffXfermode(rec, SkXfermode::kSrcOver_Mode)); } - SkAutoTUnref<const GrFragmentProcessor> xferFP(mode->getFragmentProcessorForImageFilter(bgFP)); + sk_sp<const GrFragmentProcessor> xferFP(mode->getFragmentProcessorForImageFilter(bgFP)); // A null 'xferFP' here means kSrc_Mode was used in which case we can just proceed if (xferFP) { - paint.addColorFragmentProcessor(xferFP); + paint.addColorFragmentProcessor(xferFP.get()); } } else { paint.addColorFragmentProcessor(bgFP); @@ -248,7 +238,9 @@ sk_sp<SkSpecialImage> SkXfermodeImageFilter::filterImageGPU(SkSpecialImage* sour paint.setPorterDuffXPFactory(SkXfermode::kSrc_Mode); - sk_sp<GrDrawContext> drawContext(context->drawContext(sk_ref_sp(dst->asRenderTarget()))); + sk_sp<GrDrawContext> drawContext(context->newDrawContext(GrContext::kLoose_BackingFit, + bounds.width(), bounds.height(), + kSkia8888_GrPixelConfig)); if (!drawContext) { return nullptr; } @@ -259,7 +251,7 @@ sk_sp<SkSpecialImage> SkXfermodeImageFilter::filterImageGPU(SkSpecialImage* sour return SkSpecialImage::MakeFromGpu(SkIRect::MakeWH(bounds.width(), bounds.height()), kNeedNewImageUniqueID_SpecialImage, - std::move(dst)); + drawContext->asTexture()); } #endif |