diff options
author | Brian Osman <brianosman@google.com> | 2019-01-04 17:03:00 -0500 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2019-01-05 20:06:51 +0000 |
commit | 82ebe04caff2d7a0b47772ed44c4e3d2318e8aff (patch) | |
tree | 8df975dadbf4f8a63be20b9e6d2edddcaf282672 /gm | |
parent | b282e1f622f62df3cdf6b9c2ad67ce7b2e9364e0 (diff) | |
download | platform_external_skqp-82ebe04caff2d7a0b47772ed44c4e3d2318e8aff.tar.gz platform_external_skqp-82ebe04caff2d7a0b47772ed44c4e3d2318e8aff.tar.bz2 platform_external_skqp-82ebe04caff2d7a0b47772ed44c4e3d2318e8aff.zip |
Reland "Add SkColorSpace factory from 3x3 row-major gamut and transfer function"
Moved named common transfer functions and gamuts to constexpr values in
SkColorSpace.h, in SkNamedTransferFn and SkNamedGamut namespaces.
Converted nearly all SkColorSpace::MakeRGB calls within Skia to use the
new factory with the named values. Multiple clients want a way to
extract named transfer function and gamut - this still doesn't provide
that, but this may be a better path forward for honestly advertising how
SkColorSpace works internally.
Originally landed as:
https://skia.googlesource.com/skia/+/a9549ab31630fc244094e6f1692371cbaf87f666
Re-landing with a new serialization format, but maintaining ability to
load old serialized color spaces, for SKP compatibility.
Bug: skia:
Change-Id: Ib84a6e1cd5d7d9816175773fdbaff2ca32658667
Reviewed-on: https://skia-review.googlesource.com/c/181176
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: Brian Osman <brianosman@google.com>
Diffstat (limited to 'gm')
-rw-r--r-- | gm/makecolorspace.cpp | 4 | ||||
-rw-r--r-- | gm/p3.cpp | 6 | ||||
-rw-r--r-- | gm/pictureshadercache.cpp | 9 | ||||
-rw-r--r-- | gm/readpixels.cpp | 5 | ||||
-rw-r--r-- | gm/tosrgb_colorfilter.cpp | 13 |
5 files changed, 17 insertions, 20 deletions
diff --git a/gm/makecolorspace.cpp b/gm/makecolorspace.cpp index c7e603d9ac..2f5acd699e 100644 --- a/gm/makecolorspace.cpp +++ b/gm/makecolorspace.cpp @@ -48,8 +48,8 @@ protected: } void onDraw(SkCanvas* canvas) override { - sk_sp<SkColorSpace> wideGamut = SkColorSpace::MakeRGB(SkColorSpace::kSRGB_RenderTargetGamma, - SkColorSpace::kAdobeRGB_Gamut); + sk_sp<SkColorSpace> wideGamut = SkColorSpace::MakeRGB(SkNamedTransferFn::kSRGB, + SkNamedGamut::kAdobeRGB); sk_sp<SkColorSpace> wideGamutLinear = wideGamut->makeLinearGamma(); // Lazy images @@ -94,8 +94,7 @@ static void compare_pixel(const char* label, } DEF_SIMPLE_GM(p3, canvas, 450, 1300) { - auto p3 = SkColorSpace::MakeRGB(SkColorSpace::kSRGB_RenderTargetGamma, - SkColorSpace::kDCIP3_D65_Gamut); + auto p3 = SkColorSpace::MakeRGB(SkNamedTransferFn::kSRGB, SkNamedGamut::kDCIP3); auto srgb = SkColorSpace::MakeSRGB(); auto p3_to_srgb = [&](SkColor4f c) { @@ -356,8 +355,7 @@ DEF_SIMPLE_GM(p3, canvas, 450, 1300) { } DEF_SIMPLE_GM(p3_ovals, canvas, 450, 320) { - auto p3 = SkColorSpace::MakeRGB(SkColorSpace::kSRGB_RenderTargetGamma, - SkColorSpace::kDCIP3_D65_Gamut); + auto p3 = SkColorSpace::MakeRGB(SkNamedTransferFn::kSRGB, SkNamedGamut::kDCIP3); // Test cases that exercise each Op in GrOvalOpFactory.cpp diff --git a/gm/pictureshadercache.cpp b/gm/pictureshadercache.cpp index b3e2c26ab4..e3badd801d 100644 --- a/gm/pictureshadercache.cpp +++ b/gm/pictureshadercache.cpp @@ -60,9 +60,12 @@ public: { // Render in a funny color space that converts green to yellow. - SkMatrix44 greenToYellow; - greenToYellow.setFloat(0, 1, 1.0f); - sk_sp<SkColorSpace> gty = SkColorSpace::MakeRGB(SkColorSpace::kSRGB_RenderTargetGamma, + skcms_Matrix3x3 greenToYellow = {{ + { 1, 1, 0 }, + { 0, 1, 0 }, + { 0, 0, 1 }, + }}; + sk_sp<SkColorSpace> gty = SkColorSpace::MakeRGB(SkNamedTransferFn::kSRGB, greenToYellow); SkImageInfo info = SkImageInfo::MakeN32Premul(100, 100, std::move(gty)); sk_sp<SkSurface> surface(SkSurface::MakeRaster(info)); diff --git a/gm/readpixels.cpp b/gm/readpixels.cpp index 8250860901..e69803bcf0 100644 --- a/gm/readpixels.cpp +++ b/gm/readpixels.cpp @@ -62,10 +62,9 @@ static sk_sp<SkImage> make_picture_image() { } static sk_sp<SkColorSpace> make_parametric_transfer_fn(const SkColorSpacePrimaries& primaries) { - SkMatrix44 toXYZD50; + skcms_Matrix3x3 toXYZD50; SkAssertResult(primaries.toXYZD50(&toXYZD50)); - SkColorSpaceTransferFn fn; - fn.fA = 1.f; fn.fB = 0.f; fn.fC = 0.f; fn.fD = 0.f; fn.fE = 0.f; fn.fF = 0.f; fn.fG = 1.8f; + skcms_TransferFunction fn = { 1.8f, 1.f, 0.f, 0.f, 0.f, 0.f, 0.f }; return SkColorSpace::MakeRGB(fn, toXYZD50); } diff --git a/gm/tosrgb_colorfilter.cpp b/gm/tosrgb_colorfilter.cpp index d9c7890aae..8637386922 100644 --- a/gm/tosrgb_colorfilter.cpp +++ b/gm/tosrgb_colorfilter.cpp @@ -26,20 +26,17 @@ DEF_SIMPLE_GM_BG(tosrgb_colorfilter, canvas, 130, 130, SK_ColorBLACK) { canvas->drawBitmapRect(bmp, SkRect::MakeXYWH(10, 10, 50, 50), nullptr); auto srgb = SkColorSpace::MakeSRGB(); - auto rec2020 = SkColorSpace::MakeRGB(SkColorSpace::kSRGB_RenderTargetGamma, - SkColorSpace::kRec2020_Gamut); + auto rec2020 = SkColorSpace::MakeRGB(SkNamedTransferFn::kSRGB, SkNamedGamut::kRec2020); // NarrowGamut RGB (an artifically smaller than sRGB gamut) - SkColorSpacePrimaries narrowPrimaries = { + skcms_Matrix3x3 narrowGamutRGBMatrix; + SkAssertResult(skcms_PrimariesToXYZD50( 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; - narrowPrimaries.toXYZD50(&narrowGamutRGBMatrix); - auto narrow = SkColorSpace::MakeRGB(SkColorSpace::kSRGB_RenderTargetGamma, - narrowGamutRGBMatrix); + &narrowGamutRGBMatrix)); + auto narrow = SkColorSpace::MakeRGB(SkNamedTransferFn::kSRGB, narrowGamutRGBMatrix); SkPaint paint; |