OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2013 Google Inc. | 2 * Copyright 2013 Google Inc. |
3 * | 3 * |
4 * 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 |
5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
6 */ | 6 */ |
7 | 7 |
8 #include "SkTypes.h" | 8 #include "SkTypes.h" |
9 | 9 |
10 #if SK_SUPPORT_GPU | 10 #if SK_SUPPORT_GPU |
11 | 11 |
12 #include "GrContext.h" | 12 #include "GrContext.h" |
13 #include "GrPath.h" | 13 #include "GrPath.h" |
14 #include "GrStyle.h" | 14 #include "GrShape.h" |
15 #include "SkBitmap.h" | 15 #include "SkBitmap.h" |
16 #include "SkCanvas.h" | 16 #include "SkCanvas.h" |
17 #include "SkColor.h" | 17 #include "SkColor.h" |
18 #include "SkPaint.h" | 18 #include "SkPaint.h" |
19 #include "SkPath.h" | 19 #include "SkPath.h" |
20 #include "SkDashPathEffect.h" | 20 #include "SkDashPathEffect.h" |
21 #include "SkRRect.h" | 21 #include "SkRRect.h" |
22 #include "SkRect.h" | 22 #include "SkRect.h" |
23 #include "SkSurface.h" | 23 #include "SkSurface.h" |
24 #include "Test.h" | 24 #include "Test.h" |
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
85 sampleCount, nullptr)); | 85 sampleCount, nullptr)); |
86 if (!surface) { | 86 if (!surface) { |
87 continue; | 87 continue; |
88 } | 88 } |
89 test_func(reporter, surface->getCanvas()); | 89 test_func(reporter, surface->getCanvas()); |
90 } | 90 } |
91 } | 91 } |
92 } | 92 } |
93 | 93 |
94 DEF_GPUTEST(GrPathKeys, reporter, /*factory*/) { | 94 DEF_GPUTEST(GrPathKeys, reporter, /*factory*/) { |
95 // Keys should not ignore conic weights. | 95 SkPaint strokePaint; |
96 SkPath path1, path2; | 96 strokePaint.setStyle(SkPaint::kStroke_Style); |
97 path1.setIsVolatile(true); | 97 strokePaint.setStrokeWidth(10.f); |
98 path2.setIsVolatile(true); | 98 GrStyle styles[] = { |
99 SkPoint p0 = SkPoint::Make(100, 0); | 99 GrStyle::SimpleFill(), |
100 SkPoint p1 = SkPoint::Make(100, 100); | 100 GrStyle::SimpleHairline(), |
| 101 GrStyle(strokePaint) |
| 102 }; |
101 | 103 |
102 path1.conicTo(p0, p1, .5f); | 104 for (const GrStyle& style : styles) { |
103 path2.conicTo(p0, p1, .7f); | 105 // Keys should not ignore conic weights. |
| 106 SkPath path1, path2; |
| 107 path1.setIsVolatile(true); |
| 108 path2.setIsVolatile(true); |
| 109 SkPoint p0 = SkPoint::Make(100, 0); |
| 110 SkPoint p1 = SkPoint::Make(100, 100); |
104 | 111 |
105 bool isVolatile; | 112 path1.conicTo(p0, p1, .5f); |
106 GrUniqueKey key1, key2; | 113 path2.conicTo(p0, p1, .7f); |
107 GrPath::ComputeKey(path1, GrStyle::SimpleFill(), &key1, &isVolatile); | 114 |
108 GrPath::ComputeKey(path2, GrStyle::SimpleFill(), &key2, &isVolatile); | 115 bool isVolatile; |
109 REPORTER_ASSERT(reporter, key1 != key2); | 116 GrUniqueKey key1, key2; |
| 117 // Even though the paths are marked volatile, they should have keys base
d on the path data |
| 118 // because they have a small amount of data. |
| 119 GrPath::ComputeKey(GrShape(path1, GrStyle::SimpleFill()), &key1, &isVola
tile); |
| 120 REPORTER_ASSERT(reporter, !isVolatile); |
| 121 REPORTER_ASSERT(reporter, key1.isValid()); |
| 122 GrPath::ComputeKey(GrShape(path2, GrStyle::SimpleFill()), &key2, &isVola
tile); |
| 123 REPORTER_ASSERT(reporter, !isVolatile); |
| 124 REPORTER_ASSERT(reporter, key1.isValid()); |
| 125 REPORTER_ASSERT(reporter, key1 != key2); |
| 126 |
| 127 // Ensure that recreating the GrShape doesn't change the key. |
| 128 { |
| 129 GrUniqueKey tempKey; |
| 130 GrPath::ComputeKey(GrShape(path1, GrStyle::SimpleFill()), &tempKey,
&isVolatile); |
| 131 REPORTER_ASSERT(reporter, key1 == tempKey); |
| 132 } |
| 133 |
| 134 // Try a large path that is too big to be keyed off its data. |
| 135 SkPath path3; |
| 136 SkPath path4; |
| 137 for (int i = 0; i < 1000; ++i) { |
| 138 SkScalar s = SkIntToScalar(i); |
| 139 path3.conicTo(s, 3.f * s / 4, s + 1.f, s, 0.5f + s / 2000.f); |
| 140 path4.conicTo(s, 3.f * s / 4, s + 1.f, s, 0.3f + s / 2000.f); |
| 141 } |
| 142 |
| 143 GrUniqueKey key3, key4; |
| 144 // These aren't marked volatile and so should have keys |
| 145 GrPath::ComputeKey(GrShape(path3, style), &key3, &isVolatile); |
| 146 REPORTER_ASSERT(reporter, !isVolatile); |
| 147 REPORTER_ASSERT(reporter, key3.isValid()); |
| 148 GrPath::ComputeKey(GrShape(path4, style), &key4, &isVolatile); |
| 149 REPORTER_ASSERT(reporter, !isVolatile); |
| 150 REPORTER_ASSERT(reporter, key4.isValid()); |
| 151 REPORTER_ASSERT(reporter, key3 != key4); |
| 152 |
| 153 { |
| 154 GrUniqueKey tempKey; |
| 155 path3.setIsVolatile(true); |
| 156 GrPath::ComputeKey(GrShape(path3, style), &key1, &isVolatile); |
| 157 REPORTER_ASSERT(reporter, isVolatile); |
| 158 REPORTER_ASSERT(reporter, !tempKey.isValid()); |
| 159 } |
| 160 } |
110 } | 161 } |
111 | 162 |
112 #endif | 163 #endif |
OLD | NEW |