Revert "Revert "Add GM to test SkToSRGBColorFilter""

This reverts commit a1fc47169a.

Reason for revert: serialization fixed

Original change's description:
> Revert "Add GM to test SkToSRGBColorFilter"
> 
> This reverts commit fa3ed03720.
> 
> Reason for revert: GM is failing on a lot of bots
> 
> Original change's description:
> > Add GM to test SkToSRGBColorFilter
> > 
> > Bug: skia:
> > Change-Id: If342ad5503d1b427f2d04ce15b75f0f7fa2706c1
> > Reviewed-on: https://skia-review.googlesource.com/26426
> > Reviewed-by: Mike Klein <mtklein@google.com>
> > Commit-Queue: Brian Osman <brianosman@google.com>
> 
> TBR=djsollen@google.com,mtklein@google.com,brianosman@google.com
> 
> Change-Id: I92fe179ead6d115b32b3a9533b8ee0e10bb3ee43
> No-Presubmit: true
> No-Tree-Checks: true
> No-Try: true
> Bug: skia:
> Reviewed-on: https://skia-review.googlesource.com/26522
> Reviewed-by: Kevin Lubick <kjlubick@google.com>
> Commit-Queue: Kevin Lubick <kjlubick@google.com>

TBR=djsollen@google.com,mtklein@google.com,kjlubick@google.com,brianosman@google.com

Change-Id: Id4db253a149ff978456ecfe55c8e551e325c98ac
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Bug: skia:
Reviewed-on: https://skia-review.googlesource.com/26511
Reviewed-by: Mike Reed <reed@google.com>
Commit-Queue: Mike Reed <reed@google.com>
This commit is contained in:
Mike Reed 2017-07-25 17:11:10 +00:00 committed by Skia Commit-Bot
parent 205c69d489
commit fa78ece52e
3 changed files with 63 additions and 1 deletions

57
gm/srgb_color_filter.cpp Normal file
View File

@ -0,0 +1,57 @@
/*
* Copyright 2017 Google Inc.
*
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
#include "gm.h"
#include "SkPM4fPriv.h"
#include "SkToSRGBColorFilter.h"
DEF_SIMPLE_GM_BG(srgb_color_filter, canvas, 130, 130, SK_ColorBLACK) {
// Src bitmap with some colors that we're going to interpret as being in a few different spaces
SkBitmap bmp;
bmp.allocN32Pixels(3, 2);
SkPMColor* pixels = reinterpret_cast<SkPMColor*>(bmp.getPixels());
pixels[0] = SkPackARGB32(0xFF, 0xA0, 0x00, 0x00);
pixels[1] = SkPackARGB32(0xFF, 0x00, 0xA0, 0x00);
pixels[2] = SkPackARGB32(0xFF, 0x00, 0x00, 0xA0);
pixels[3] = SkPackARGB32(0xFF, 0x00, 0xA0, 0xA0);
pixels[4] = SkPackARGB32(0xFF, 0xA0, 0x00, 0xA0);
pixels[5] = SkPackARGB32(0xFF, 0xA0, 0xA0, 0x00);
// Reference image
canvas->drawBitmapRect(bmp, SkRect::MakeXYWH(10, 10, 50, 50), nullptr);
auto srgb = SkColorSpace::MakeSRGB();
auto rec2020 = SkColorSpace::MakeRGB(SkColorSpace::kSRGB_RenderTargetGamma,
SkColorSpace::kRec2020_Gamut);
// NarrowGamut RGB (an artifically smaller than sRGB gamut)
SkColorSpacePrimaries narrowPrimaries = {
0.54f, 0.33f, // Rx, Ry
0.33f, 0.50f, // Gx, Gy
0.25f, 0.20f, // Bx, By
0.3127f, 0.3290f, // Wx, Wy
};
SkMatrix44 narrowGamutRGBMatrix(SkMatrix44::kUninitialized_Constructor);
narrowPrimaries.toXYZD50(&narrowGamutRGBMatrix);
auto narrow = SkColorSpace::MakeRGB(SkColorSpace::kSRGB_RenderTargetGamma,
narrowGamutRGBMatrix);
SkPaint paint;
// Transforming sRGB -> sRGB should do nothing. Top two squares should look identical.
paint.setColorFilter(SkToSRGBColorFilter::Make(srgb));
canvas->drawBitmapRect(bmp, SkRect::MakeXYWH(70, 10, 50, 50), &paint);
// Rec2020 -> sRGB should produce more vivid colors.
paint.setColorFilter(SkToSRGBColorFilter::Make(rec2020));
canvas->drawBitmapRect(bmp, SkRect::MakeXYWH(10, 70, 50, 50), &paint);
// Narrow -> sRGB should produce more muted colors.
paint.setColorFilter(SkToSRGBColorFilter::Make(narrow));
canvas->drawBitmapRect(bmp, SkRect::MakeXYWH(70, 70, 50, 50), &paint);
}

View File

@ -277,6 +277,7 @@ gm_sources = [
"$_gm/spritebitmap.cpp",
"$_gm/srcmode.cpp",
"$_gm/srgb.cpp",
"$_gm/srgb_color_filter.cpp",
"$_gm/stlouisarch.cpp",
"$_gm/stringart.cpp",
"$_gm/stroke_rect_shader.cpp",

View File

@ -54,7 +54,11 @@ void SkToSRGBColorFilter::onAppendStages(SkRasterPipeline* p,
}
sk_sp<SkColorFilter> SkToSRGBColorFilter::Make(sk_sp<SkColorSpace> srcColorSpace) {
return sk_sp<SkColorFilter>(new SkToSRGBColorFilter(std::move(srcColorSpace)));
if (srcColorSpace->isSRGB()) {
return nullptr;
} else {
return sk_sp<SkColorFilter>(new SkToSRGBColorFilter(std::move(srcColorSpace)));
}
}
SkToSRGBColorFilter::SkToSRGBColorFilter(sk_sp<SkColorSpace> srcColorSpace)