diff options
author | 2016-12-28 12:28:18 -0500 | |
---|---|---|
committer | 2016-12-29 00:28:54 +0000 | |
commit | e02d3caab823728d3106bcb1d4fbb674afc959fb (patch) | |
tree | 87f83848ddafe339f14c3371b8a91285d77493c0 /src/effects/SkMatrixConvolutionImageFilter.cpp | |
parent | 7cf774573cc5bc7e588ed4489d0a4127e9edf0cc (diff) |
Add ImageToColorSpace helper in SkImageFilter
Share this logic among a couple filters that need it. This also fixes a
bug that showed up in the morhpology GM for GPU color space configs.
BUG=skia:
Change-Id: Ic686b07aff80e58e14a86108703bfbb3cf524979
Reviewed-on: https://skia-review.googlesource.com/6475
Reviewed-by: Brian Salomon <bsalomon@google.com>
Commit-Queue: Brian Osman <brianosman@google.com>
Diffstat (limited to 'src/effects/SkMatrixConvolutionImageFilter.cpp')
-rw-r--r-- | src/effects/SkMatrixConvolutionImageFilter.cpp | 32 |
1 files changed, 5 insertions, 27 deletions
diff --git a/src/effects/SkMatrixConvolutionImageFilter.cpp b/src/effects/SkMatrixConvolutionImageFilter.cpp index 40d09d661a..6af8508b5a 100644 --- a/src/effects/SkMatrixConvolutionImageFilter.cpp +++ b/src/effects/SkMatrixConvolutionImageFilter.cpp @@ -10,7 +10,6 @@ #include "SkColorPriv.h" #include "SkReadBuffer.h" #include "SkSpecialImage.h" -#include "SkSpecialSurface.h" #include "SkWriteBuffer.h" #include "SkRect.h" #include "SkUnPreMultiply.h" @@ -282,23 +281,6 @@ static GrTextureDomain::Mode convert_tilemodes(SkMatrixConvolutionImageFilter::T } return GrTextureDomain::kIgnore_Mode; } - -// Return a copy of 'src' transformed to the output's color space -static sk_sp<SkSpecialImage> image_to_color_space(SkSpecialImage* src, - const SkImageFilter::OutputProperties& outProps) { - sk_sp<SkSpecialSurface> surf(src->makeSurface( - outProps, SkISize::Make(src->width(), src->height()))); - if (!surf) { - return sk_ref_sp(src); - } - - SkCanvas* canvas = surf->getCanvas(); - SkASSERT(canvas); - - src->draw(canvas, 0, 0, nullptr); - - return surf->makeImageSnapshot(); -} #endif sk_sp<SkSpecialImage> SkMatrixConvolutionImageFilter::onFilterImage(SkSpecialImage* source, @@ -322,15 +304,11 @@ sk_sp<SkSpecialImage> SkMatrixConvolutionImageFilter::onFilterImage(SkSpecialIma fKernelSize.width() * fKernelSize.height() <= MAX_KERNEL_SIZE) { GrContext* context = source->getContext(); - // If the input is not yet already in the destination color space, do an explicit up-front - // conversion. This is extremely unlikely (maybe even impossible). Typically, applyCropRect - // will have called pad_image to account for our dilation of bounds, so the result will - // already be moved to the destination color space. If someone makes a filter DAG that - // avoids that, then we use this fall-back, which saves us from having to do the xform - // during the filter itself. - if (input->getColorSpace() != ctx.outputProperties().colorSpace()) { - input = image_to_color_space(input.get(), ctx.outputProperties()); - } + // Ensure the input is in the destination color space. Typically applyCropRect will have + // called pad_image to account for our dilation of bounds, so the result will already be + // moved to the destination color space. If a filter DAG avoids that, then we use this + // fall-back, which saves us from having to do the xform during the filter itself. + input = ImageToColorSpace(input.get(), ctx.outputProperties()); sk_sp<GrTexture> inputTexture(input->asTextureRef(context)); SkASSERT(inputTexture); |