From df3fbd6a0ecababda933a09915467380d135ec4e Mon Sep 17 00:00:00 2001 From: Matt Sarett Date: Mon, 17 Oct 2016 13:52:49 -0400 Subject: Apply correct sRGB->Linear4f conversion in SkModeColorFilter This fixes a software rendering bug in Android. Vector drawable icons were being drawn "too light" because they were missing this step. BUG=skia: GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=3563 Change-Id: I9b9c0dc571244dab17ee125ecb7814d7f85181e2 Reviewed-on: https://skia-review.googlesource.com/3563 Commit-Queue: Mike Klein Reviewed-by: Mike Klein --- tests/SkColor4fTest.cpp | 65 ------------------------------------------------- 1 file changed, 65 deletions(-) (limited to 'tests/SkColor4fTest.cpp') diff --git a/tests/SkColor4fTest.cpp b/tests/SkColor4fTest.cpp index 0cbd5ce4c6..a36bc86307 100644 --- a/tests/SkColor4fTest.cpp +++ b/tests/SkColor4fTest.cpp @@ -76,71 +76,6 @@ DEF_TEST(Color4f_premul, reporter) { } } -////////////////////////////////////////////////////////////////////////////////////////////////// - -static sk_sp make_mode_cf() { - return SkColorFilter::MakeModeFilter(0xFFBB8855, SkXfermode::kPlus_Mode); -} - -static sk_sp make_mx_cf() { - const float mx[] = { - 0.5f, 0, 0, 0, 0.1f, - 0, 0.5f, 0, 0, 0.2f, - 0, 0, 1, 0, -0.1f, - 0, 0, 0, 1, 0, - }; - return SkColorFilter::MakeMatrixFilterRowMajor255(mx); -} - -static sk_sp make_compose_cf() { - return SkColorFilter::MakeComposeFilter(make_mode_cf(), make_mx_cf()); -} - -static bool compare_spans(const SkPM4f span4f[], const SkPMColor span4b[], int count, - float tolerance = 1.0f/255) { - for (int i = 0; i < count; ++i) { - SkPM4f c0 = SkPM4f::FromPMColor(span4b[i]); - SkPM4f c1 = span4f[i]; - if (!nearly_equal(c0, c1, tolerance)) { - return false; - } - } - return true; -} - -DEF_TEST(Color4f_colorfilter, reporter) { - struct { - sk_sp (*fFact)(); - bool fSupports4f; - const char* fName; - } recs[] = { - { make_mode_cf, true, "mode" }, - { make_mx_cf, true, "matrix" }, - { make_compose_cf, true, "compose" }, - }; - - // prepare the src - const int N = 100; - SkPMColor src4b[N]; - SkPM4f src4f[N]; - SkRandom rand; - for (int i = 0; i < N; ++i) { - src4b[i] = SkPreMultiplyColor(rand.nextU()); - src4f[i] = SkPM4f::FromPMColor(src4b[i]); - } - // confirm that our srcs are (nearly) equal - REPORTER_ASSERT(reporter, compare_spans(src4f, src4b, N)); - - for (const auto& rec : recs) { - auto filter(rec.fFact()); - SkPMColor dst4b[N]; - filter->filterSpan(src4b, N, dst4b); - SkPM4f dst4f[N]; - filter->filterSpan4f(src4f, N, dst4f); - REPORTER_ASSERT(reporter, compare_spans(dst4f, dst4b, N)); - } -} - /////////////////////////////////////////////////////////////////////////////////////////////////// typedef SkPM4f (*SkXfermodeProc4f)(const SkPM4f& src, const SkPM4f& dst); -- cgit v1.2.3