LEFT | RIGHT |
1 | |
2 /* | 1 /* |
3 * Copyright 2011 Google Inc. | 2 * Copyright 2013 Google Inc. |
4 * | 3 * |
5 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
6 * found in the LICENSE file. | 5 * found in the LICENSE file. |
7 */ | 6 */ |
8 #include "Test.h" | 7 #include "Test.h" |
9 #include "SkColorPriv.h" | 8 #include "SkColorPriv.h" |
10 | 9 |
11 static bool next_color(SkColor& color) { | 10 static bool next_color(SkColor& color) { |
12 unsigned a = SkColorGetA(color); | 11 unsigned a = SkColorGetA(color); |
13 unsigned r = SkColorGetR(color) + 3; | 12 unsigned r = SkColorGetR(color) + 3; |
(...skipping 10 matching lines...) Expand all Loading... |
24 } | 23 } |
25 | 24 |
26 // If srcAlpha == 0 then dstOut == dstIn | 25 // If srcAlpha == 0 then dstOut == dstIn |
27 static void test_src_alpha_0(skiatest::Reporter* reporter) { | 26 static void test_src_alpha_0(skiatest::Reporter* reporter) { |
28 SkColor srcIn = 0; | 27 SkColor srcIn = 0; |
29 SkColor dstIn = 0; | 28 SkColor dstIn = 0; |
30 do { | 29 do { |
31 if (!SkColorGetA(srcIn)) { | 30 if (!SkColorGetA(srcIn)) { |
32 do { | 31 do { |
33 SkPMColor srcInPM = SkPreMultiplyColor(srcIn); | 32 SkPMColor srcInPM = SkPreMultiplyColor(srcIn); |
34 SkPMColor dstInPM = SkPreMultiplyColor(dstIn); | |
35 SkPMColor dstOut; | 33 SkPMColor dstOut; |
36 | 34 |
37 dstOut = srcInPM + SkAlphaMulQ(dstInPM, SkAlphaToScale(255 - SkG
etPackedA32(srcInPM))); | 35 dstOut = srcInPM + SkAlphaMulQ(dstIn, SkAlphaToScale(255 - SkGet
PackedA32(srcInPM))); |
38 REPORTER_ASSERT(reporter, dstOut == dstInPM); | 36 REPORTER_ASSERT(reporter, dstOut == dstIn); |
39 | 37 |
40 dstOut = srcInPM + SkAlphaMulQ(dstInPM, SkAlphaToInvScale256(SkG
etPackedA32(srcInPM))); | 38 dstOut = srcInPM + SkAlphaMulQ(dstIn, SkAlphaToInvScale8(SkGetPa
ckedA32(srcInPM))); |
41 REPORTER_ASSERT(reporter, dstOut == dstInPM); | 39 REPORTER_ASSERT(reporter, dstOut == dstIn); |
42 | 40 |
43 SkPMColor16 srcInPM4444 = SkPixel32ToPixel4444(srcInPM); | 41 SkPMColor16 srcInPM4444 = SkPixel32ToPixel4444(srcInPM); |
44 SkPMColor16 dstInPM4444 = SkPixel32ToPixel4444(dstInPM); | 42 U16CPU dstIn4444 = SkPixel32ToPixel4444(dstIn); |
45 dstOut = srcInPM4444 + SkAlphaMulQ4(dstInPM4444, SkAlphaToInvSca
le16(SkGetPackedA4444(srcInPM4444))); | 43 dstOut = srcInPM4444 + SkAlphaMulQ4(dstIn4444, SkAlphaToInvScale
4(SkGetPackedA4444(srcInPM4444))); |
46 REPORTER_ASSERT(reporter, dstOut == dstInPM4444); | 44 REPORTER_ASSERT(reporter, dstOut == dstIn4444); |
47 } while (next_color(dstIn)); | 45 } while (next_color(dstIn)); |
48 } | 46 } |
49 } while (next_color(srcIn)); | 47 } while (next_color(srcIn)); |
50 } | 48 } |
51 | 49 |
52 // If srcAlpha == 0xff then dstOut == srcIn | 50 // If srcAlpha == 0xff then dstOut == srcIn |
53 static void test_src_alpha_ff(skiatest::Reporter* reporter) { | 51 static void test_src_alpha_ff(skiatest::Reporter* reporter) { |
54 SkColor srcIn = 0; | 52 SkColor srcIn = 0; |
55 SkColor dstIn = 0; | 53 SkColor dstIn = 0; |
56 do { | 54 do { |
57 if (SkColorGetA(srcIn) == 0xff) { | 55 if (SkColorGetA(srcIn) == 0xff) { |
58 do { | 56 do { |
59 SkPMColor srcInPM = SkPreMultiplyColor(srcIn); | 57 SkPMColor srcInPM = SkPreMultiplyColor(srcIn); |
60 SkPMColor dstInPM = SkPreMultiplyColor(dstIn); | |
61 SkPMColor dstOut; | 58 SkPMColor dstOut; |
62 | 59 |
63 dstOut = srcInPM + SkAlphaMulQ(dstInPM, SkAlphaToScale(255 - SkG
etPackedA32(srcInPM))); | 60 dstOut = srcInPM + SkAlphaMulQ(dstIn, SkAlphaToScale(255 - SkGet
PackedA32(srcInPM))); |
64 REPORTER_ASSERT(reporter, dstOut == srcInPM); | 61 REPORTER_ASSERT(reporter, dstOut == srcInPM); |
65 dstOut = srcInPM + SkAlphaMulQ(dstInPM, SkAlphaToInvScale256(SkG
etPackedA32(srcInPM))); | 62 dstOut = srcInPM + SkAlphaMulQ(dstIn, SkAlphaToInvScale8(SkGetPa
ckedA32(srcInPM))); |
66 REPORTER_ASSERT(reporter, dstOut == srcInPM); | 63 REPORTER_ASSERT(reporter, dstOut == srcInPM); |
67 | 64 |
68 SkPMColor16 srcInPM4444 = SkPixel32ToPixel4444(srcInPM); | 65 SkPMColor16 srcInPM4444 = SkPixel32ToPixel4444(srcInPM); |
69 SkPMColor16 dstInPM4444 = SkPixel32ToPixel4444(dstInPM); | 66 U16CPU dstIn4444 = SkPixel32ToPixel4444(dstIn); |
70 dstOut = srcInPM4444 + SkAlphaMulQ4(dstInPM4444, SkAlphaToInvSca
le16(SkGetPackedA4444(srcInPM4444))); | 67 dstOut = srcInPM4444 + SkAlphaMulQ4(dstIn4444, SkAlphaToInvScale
4(SkGetPackedA4444(srcInPM4444))); |
71 REPORTER_ASSERT(reporter, dstOut == srcInPM4444); | 68 REPORTER_ASSERT(reporter, dstOut == srcInPM4444); |
72 } while (next_color(dstIn)); | 69 } while (next_color(dstIn)); |
73 } | 70 } |
74 } while (next_color(srcIn)); | 71 } while (next_color(srcIn)); |
75 } | 72 } |
76 | 73 |
77 // If dstAlpha == 0xff then dstOutAlpha == 0xff | 74 // If dstAlpha == 0xff then dstOutAlpha == 0xff |
78 static void test_dst_alpha_ff(skiatest::Reporter* reporter) { | 75 static void test_dst_alpha_ff(skiatest::Reporter* reporter) { |
79 SkColor srcIn = 0; | 76 SkColor srcIn = 0; |
80 SkColor dstIn = 0; | 77 SkColor dstIn = 0; |
81 do { | 78 do { |
82 if (SkColorGetA(dstIn) == 0xff) { | 79 if (SkColorGetA(dstIn) == 0xff) { |
83 do { | 80 do { |
84 SkPMColor srcInPM = SkPreMultiplyColor(srcIn); | 81 SkPMColor srcInPM = SkPreMultiplyColor(srcIn); |
85 SkPMColor dstInPM = SkPreMultiplyColor(dstIn); | |
86 SkPMColor dstOut; | 82 SkPMColor dstOut; |
87 | 83 |
88 dstOut = srcInPM + SkAlphaMulQ(dstInPM, SkAlphaToScale(255 - SkG
etPackedA32(srcInPM))); | 84 dstOut = srcInPM + SkAlphaMulQ(dstIn, SkAlphaToScale(255 - SkGet
PackedA32(srcInPM))); |
89 REPORTER_ASSERT(reporter, SkGetPackedA32(dstOut) == 0xff); | 85 REPORTER_ASSERT(reporter, SkGetPackedA32(dstOut) == 0xff); |
90 dstOut = srcInPM + SkAlphaMulQ(dstInPM, SkAlphaToInvScale256(SkG
etPackedA32(srcInPM))); | 86 dstOut = srcInPM + SkAlphaMulQ(dstIn, SkAlphaToInvScale8(SkGetPa
ckedA32(srcInPM))); |
91 REPORTER_ASSERT(reporter, SkGetPackedA32(dstOut) == 0xff); | 87 REPORTER_ASSERT(reporter, SkGetPackedA32(dstOut) == 0xff); |
92 | 88 |
93 SkPMColor16 srcInPM4444 = SkPixel32ToPixel4444(srcInPM); | 89 SkPMColor16 srcInPM4444 = SkPixel32ToPixel4444(srcInPM); |
94 SkPMColor16 dstInPM4444 = SkPixel32ToPixel4444(dstInPM); | 90 U16CPU dstIn4444 = SkPixel32ToPixel4444(dstIn); |
95 dstOut = srcInPM4444 + SkAlphaMulQ4(dstInPM4444, SkAlphaToInvSca
le16(SkGetPackedA4444(srcInPM4444))); | 91 dstOut = srcInPM4444 + SkAlphaMulQ4(dstIn4444, SkAlphaToInvScale
4(SkGetPackedA4444(srcInPM4444))); |
96 REPORTER_ASSERT(reporter, SkGetPackedA4444(dstOut) == 0xf); | 92 REPORTER_ASSERT(reporter, SkGetPackedA4444(dstOut) == 0xf); |
97 } while (next_color(dstIn)); | 93 } while (next_color(dstIn)); |
98 } | 94 } |
99 } while (next_color(srcIn)); | 95 } while (next_color(srcIn)); |
100 } | 96 } |
101 | 97 |
102 static void TestAlphaScale(skiatest::Reporter* reporter) { | 98 static void TestAlphaScale(skiatest::Reporter* reporter) { |
103 test_src_alpha_0(reporter); | 99 test_src_alpha_0(reporter); |
104 test_src_alpha_ff(reporter); | 100 test_src_alpha_ff(reporter); |
105 test_dst_alpha_ff(reporter); | 101 test_dst_alpha_ff(reporter); |
106 } | 102 } |
107 | 103 |
108 #include "TestClassDef.h" | 104 #include "TestClassDef.h" |
109 DEFINE_TESTCLASS("AlphaScaleTest", TestAlphaScaleClass, TestAlphaScale) | 105 DEFINE_TESTCLASS("AlphaScaleTest", TestAlphaScaleClass, TestAlphaScale) |
LEFT | RIGHT |