diff options
author | brianosman <brianosman@google.com> | 2016-09-27 15:11:47 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2016-09-27 15:11:47 -0700 |
commit | eec8304714f35e4c789a2b69e511f88fe5890149 (patch) | |
tree | f7200924f0cfe5abf57a3660ba96cd1c0aeca6d8 /tests/ColorSpaceTest.cpp | |
parent | b3a3b58c4eeeafca1c9ffe28d087ef5de60dc5cd (diff) |
Added kSRGBLinear_Named color space, along with tests
Gradients (and other shaders) are going to end up serializing this
particular color space very frequently, so we want a shorthand way of
writing it out. I think it's also helpful to have a clearer way of
creating it (vs. NewNamed(kSRGB_Named)->makeLinearGamma()).
BUG=skia:
GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2377763002
Review-Url: https://codereview.chromium.org/2377763002
Diffstat (limited to 'tests/ColorSpaceTest.cpp')
-rw-r--r-- | tests/ColorSpaceTest.cpp | 37 |
1 files changed, 29 insertions, 8 deletions
diff --git a/tests/ColorSpaceTest.cpp b/tests/ColorSpaceTest.cpp index 7e247d304d..d749931de1 100644 --- a/tests/ColorSpaceTest.cpp +++ b/tests/ColorSpaceTest.cpp @@ -115,6 +115,29 @@ DEF_TEST(ColorSpaceSRGBCompare, r) { REPORTER_ASSERT(r, strangeColorSpace != namedColorSpace); } +DEF_TEST(ColorSpaceSRGBLinearCompare, r) { + // Create the linear sRGB color space by name + sk_sp<SkColorSpace> namedColorSpace = SkColorSpace::NewNamed(SkColorSpace::kSRGBLinear_Named); + + // Create the linear sRGB color space via the sRGB color space's makeLinearGamma() + sk_sp<SkColorSpace> viaSrgbColorSpace = + SkColorSpace::NewNamed(SkColorSpace::kSRGB_Named)->makeLinearGamma(); + REPORTER_ASSERT(r, namedColorSpace == viaSrgbColorSpace); + + // Create a linear sRGB color space by value + SkMatrix44 srgbToxyzD50(SkMatrix44::kUninitialized_Constructor); + srgbToxyzD50.set3x3RowMajorf(g_sRGB_XYZ); + sk_sp<SkColorSpace> rgbColorSpace = + SkColorSpace::NewRGB(SkColorSpace::kLinear_RenderTargetGamma, srgbToxyzD50); + REPORTER_ASSERT(r, rgbColorSpace == namedColorSpace); + + // Change a single value from the sRGB matrix + srgbToxyzD50.set(2, 2, 0.5f); + sk_sp<SkColorSpace> strangeColorSpace = + SkColorSpace::NewRGB(SkColorSpace::kLinear_RenderTargetGamma, srgbToxyzD50); + REPORTER_ASSERT(r, strangeColorSpace != namedColorSpace); +} + class ColorSpaceTest { public: static sk_sp<SkData> WriteToICC(SkColorSpace* space) { @@ -150,21 +173,18 @@ DEF_TEST(ColorSpaceWriteICC, r) { DEF_TEST(ColorSpace_Named, r) { const struct { SkColorSpace::Named fNamed; - bool fIsSRGB; + SkGammaNamed fExpectedGamma; } recs[] { - { SkColorSpace::kSRGB_Named, true }, - { SkColorSpace::kAdobeRGB_Named, false }, + { SkColorSpace::kSRGB_Named, kSRGB_SkGammaNamed }, + { SkColorSpace::kAdobeRGB_Named, k2Dot2Curve_SkGammaNamed }, + { SkColorSpace::kSRGBLinear_Named, kLinear_SkGammaNamed }, }; for (auto rec : recs) { auto cs = SkColorSpace::NewNamed(rec.fNamed); REPORTER_ASSERT(r, cs); if (cs) { - if (rec.fIsSRGB) { - REPORTER_ASSERT(r, kSRGB_SkGammaNamed == as_CSB(cs)->gammaNamed()); - } else { - REPORTER_ASSERT(r, k2Dot2Curve_SkGammaNamed == as_CSB(cs)->gammaNamed()); - } + REPORTER_ASSERT(r, rec.fExpectedGamma == as_CSB(cs)->gammaNamed()); } } @@ -194,6 +214,7 @@ static void test_serialize(skiatest::Reporter* r, SkColorSpace* space, bool isNa DEF_TEST(ColorSpace_Serialize, r) { test_serialize(r, SkColorSpace::NewNamed(SkColorSpace::kSRGB_Named).get(), true); test_serialize(r, SkColorSpace::NewNamed(SkColorSpace::kAdobeRGB_Named).get(), true); + test_serialize(r, SkColorSpace::NewNamed(SkColorSpace::kSRGBLinear_Named).get(), true); sk_sp<SkData> monitorData = SkData::MakeFromFileName( GetResourcePath("icc_profiles/HP_ZR30w.icc").c_str()); |