| Index: src/effects/SkMorphologyImageFilter.cpp
|
| diff --git a/src/effects/SkMorphologyImageFilter.cpp b/src/effects/SkMorphologyImageFilter.cpp
|
| index f4bcaf42c06d99d4e9f946d43b24819750114b7a..5eccb0db233828351ee828617264f4fbba97b807 100644
|
| --- a/src/effects/SkMorphologyImageFilter.cpp
|
| +++ b/src/effects/SkMorphologyImageFilter.cpp
|
| @@ -14,6 +14,7 @@
|
| #include "SkMorphology_opts.h"
|
| #if SK_SUPPORT_GPU
|
| #include "GrContext.h"
|
| +#include "GrDrawContext.h"
|
| #include "GrInvariantOutput.h"
|
| #include "GrTexture.h"
|
| #include "effects/Gr1DKernelEffect.h"
|
| @@ -560,7 +561,7 @@ GrFragmentProcessor* GrMorphologyEffect::TestCreate(SkRandom* random,
|
| namespace {
|
|
|
|
|
| -void apply_morphology_rect(GrContext* context,
|
| +void apply_morphology_rect(GrDrawContext* drawContext,
|
| GrRenderTarget* rt,
|
| const GrClip& clip,
|
| GrTexture* texture,
|
| @@ -576,11 +577,11 @@ void apply_morphology_rect(GrContext* context,
|
| radius,
|
| morphType,
|
| bounds))->unref();
|
| - context->drawNonAARectToRect(rt, clip, paint, SkMatrix::I(), SkRect::Make(dstRect),
|
| - SkRect::Make(srcRect));
|
| + drawContext->drawNonAARectToRect(rt, clip, paint, SkMatrix::I(), SkRect::Make(dstRect),
|
| + SkRect::Make(srcRect));
|
| }
|
|
|
| -void apply_morphology_rect_no_bounds(GrContext* context,
|
| +void apply_morphology_rect_no_bounds(GrDrawContext* drawContext,
|
| GrRenderTarget* rt,
|
| const GrClip& clip,
|
| GrTexture* texture,
|
| @@ -594,11 +595,11 @@ void apply_morphology_rect_no_bounds(GrContext* context,
|
| direction,
|
| radius,
|
| morphType))->unref();
|
| - context->drawNonAARectToRect(rt, clip, paint, SkMatrix::I(), SkRect::Make(dstRect),
|
| - SkRect::Make(srcRect));
|
| + drawContext->drawNonAARectToRect(rt, clip, paint, SkMatrix::I(), SkRect::Make(dstRect),
|
| + SkRect::Make(srcRect));
|
| }
|
|
|
| -void apply_morphology_pass(GrContext* context,
|
| +void apply_morphology_pass(GrDrawContext* drawContext,
|
| GrRenderTarget* rt,
|
| const GrClip& clip,
|
| GrTexture* texture,
|
| @@ -632,15 +633,15 @@ void apply_morphology_pass(GrContext* context,
|
| }
|
| if (middleSrcRect.fLeft - middleSrcRect.fRight >= 0) {
|
| // radius covers srcRect; use bounds over entire draw
|
| - apply_morphology_rect(context, rt, clip, texture, srcRect, dstRect, radius,
|
| + apply_morphology_rect(drawContext, rt, clip, texture, srcRect, dstRect, radius,
|
| morphType, bounds, direction);
|
| } else {
|
| // Draw upper and lower margins with bounds; middle without.
|
| - apply_morphology_rect(context, rt, clip, texture, lowerSrcRect, lowerDstRect, radius,
|
| + apply_morphology_rect(drawContext, rt, clip, texture, lowerSrcRect, lowerDstRect, radius,
|
| morphType, bounds, direction);
|
| - apply_morphology_rect(context, rt, clip, texture, upperSrcRect, upperDstRect, radius,
|
| + apply_morphology_rect(drawContext, rt, clip, texture, upperSrcRect, upperDstRect, radius,
|
| morphType, bounds, direction);
|
| - apply_morphology_rect_no_bounds(context, rt, clip, texture, middleSrcRect, middleDstRect,
|
| + apply_morphology_rect_no_bounds(drawContext, rt, clip, texture, middleSrcRect, middleDstRect,
|
| radius, morphType, direction);
|
| }
|
| }
|
| @@ -666,13 +667,18 @@ bool apply_morphology(const SkBitmap& input,
|
| desc.fConfig = kSkia8888_GrPixelConfig;
|
| SkIRect srcRect = rect;
|
|
|
| + GrDrawContext* drawContext = context->drawContext();
|
| + if (!drawContext) {
|
| + return false;
|
| + }
|
| +
|
| if (radius.fWidth > 0) {
|
| GrTexture* texture = context->textureProvider()->refScratchTexture(
|
| desc, GrTextureProvider::kApprox_ScratchTexMatch);
|
| if (NULL == texture) {
|
| return false;
|
| }
|
| - apply_morphology_pass(context, texture->asRenderTarget(), clip, srcTexture,
|
| + apply_morphology_pass(drawContext, texture->asRenderTarget(), clip, srcTexture,
|
| srcRect, dstRect, radius.fWidth, morphType,
|
| Gr1DKernelEffect::kX_Direction);
|
| SkIRect clearRect = SkIRect::MakeXYWH(dstRect.fLeft, dstRect.fBottom,
|
| @@ -680,7 +686,7 @@ bool apply_morphology(const SkBitmap& input,
|
| GrColor clearColor = GrMorphologyEffect::kErode_MorphologyType == morphType ?
|
| SK_ColorWHITE :
|
| SK_ColorTRANSPARENT;
|
| - context->clear(&clearRect, clearColor, false, texture->asRenderTarget());
|
| + drawContext->clear(texture->asRenderTarget(), &clearRect, clearColor, false);
|
| srcTexture.reset(texture);
|
| srcRect = dstRect;
|
| }
|
| @@ -690,7 +696,7 @@ bool apply_morphology(const SkBitmap& input,
|
| if (NULL == texture) {
|
| return false;
|
| }
|
| - apply_morphology_pass(context, texture->asRenderTarget(), clip, srcTexture,
|
| + apply_morphology_pass(drawContext, texture->asRenderTarget(), clip, srcTexture,
|
| srcRect, dstRect, radius.fHeight, morphType,
|
| Gr1DKernelEffect::kY_Direction);
|
| srcTexture.reset(texture);
|
|
|