Do color space conversion in XfermodeImageFilter
authorBrian Osman <brianosman@google.com>
Tue, 20 Dec 2016 15:36:35 +0000 (10:36 -0500)
committerSkia Commit-Bot <skia-commit-bot@chromium.org>
Tue, 20 Dec 2016 16:12:44 +0000 (16:12 +0000)
BUG=skia:

Change-Id: I69c92506fca62e8711cece005f169ac05d26c872
Reviewed-on: https://skia-review.googlesource.com/6324
Reviewed-by: Brian Salomon <bsalomon@google.com>
Commit-Queue: Brian Osman <brianosman@google.com>

src/effects/SkXfermodeImageFilter.cpp

index 8ecb8be..d90cb91 100644 (file)
@@ -253,8 +253,10 @@ sk_sp<SkSpecialImage> SkXfermodeImageFilter_Base::filterImageGPU(
         backgroundMatrix.setIDiv(backgroundTex->width(), backgroundTex->height());
         backgroundMatrix.preTranslate(-SkIntToScalar(backgroundOffset.fX),
                                       -SkIntToScalar(backgroundOffset.fY));
+        sk_sp<GrColorSpaceXform> bgXform = GrColorSpaceXform::Make(background->getColorSpace(),
+                                                                   outputProperties.colorSpace());
         bgFP = GrTextureDomainEffect::Make(
-                            backgroundTex.get(), nullptr, backgroundMatrix,
+                            backgroundTex.get(), std::move(bgXform), backgroundMatrix,
                             GrTextureDomain::MakeTexelDomain(backgroundTex.get(),
                                                              background->subset()),
                             GrTextureDomain::kDecal_Mode,
@@ -269,12 +271,13 @@ sk_sp<SkSpecialImage> SkXfermodeImageFilter_Base::filterImageGPU(
         foregroundMatrix.setIDiv(foregroundTex->width(), foregroundTex->height());
         foregroundMatrix.preTranslate(-SkIntToScalar(foregroundOffset.fX),
                                       -SkIntToScalar(foregroundOffset.fY));
-
+        sk_sp<GrColorSpaceXform> fgXform = GrColorSpaceXform::Make(foreground->getColorSpace(),
+                                                                   outputProperties.colorSpace());
         sk_sp<GrFragmentProcessor> foregroundFP;
 
         foregroundFP = GrTextureDomainEffect::Make(
-                            foregroundTex.get(), nullptr, foregroundMatrix,
-                            GrTextureDomain::MakeTexelDomain(foregroundTex.get(), 
+                            foregroundTex.get(), std::move(fgXform), foregroundMatrix,
+                            GrTextureDomain::MakeTexelDomain(foregroundTex.get(),
                                                              foreground->subset()),
                             GrTextureDomain::kDecal_Mode,
                             GrSamplerParams::kNone_FilterMode);