Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(719)

Side by Side Diff: samplecode/SampleConcavePaths.cpp

Issue 855513004: Tessellating GPU path renderer. (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Created 5 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 1
2 /* 2 /*
3 * Copyright 2011 Google Inc. 3 * Copyright 2011 Google Inc.
4 * 4 *
5 * Use of this source code is governed by a BSD-style license that can be 5 * Use of this source code is governed by a BSD-style license that can be
6 * found in the LICENSE file. 6 * found in the LICENSE file.
7 */ 7 */
8 8
9 #include "SampleCode.h" 9 #include "SampleCode.h"
10 #include "SkView.h" 10 #include "SkView.h"
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
48 // Concave test 48 // Concave test
49 if (1) { 49 if (1) {
50 SkPath path; 50 SkPath path;
51 canvas->translate(0, 0); 51 canvas->translate(0, 0);
52 path.moveTo(SkIntToScalar(20), SkIntToScalar(20)); 52 path.moveTo(SkIntToScalar(20), SkIntToScalar(20));
53 path.lineTo(SkIntToScalar(80), SkIntToScalar(20)); 53 path.lineTo(SkIntToScalar(80), SkIntToScalar(20));
54 path.lineTo(SkIntToScalar(30), SkIntToScalar(30)); 54 path.lineTo(SkIntToScalar(30), SkIntToScalar(30));
55 path.lineTo(SkIntToScalar(20), SkIntToScalar(80)); 55 path.lineTo(SkIntToScalar(20), SkIntToScalar(80));
56 canvas->drawPath(path, paint); 56 canvas->drawPath(path, paint);
57 } 57 }
58
58 // Reverse concave test 59 // Reverse concave test
59 if (1) { 60 if (1) {
60 SkPath path; 61 SkPath path;
61 canvas->save(); 62 canvas->save();
62 canvas->translate(100, 0); 63 canvas->translate(100, 0);
63 path.moveTo(SkIntToScalar(20), SkIntToScalar(20)); 64 path.moveTo(SkIntToScalar(20), SkIntToScalar(20));
64 path.lineTo(SkIntToScalar(20), SkIntToScalar(80)); 65 path.lineTo(SkIntToScalar(20), SkIntToScalar(80));
65 path.lineTo(SkIntToScalar(30), SkIntToScalar(30)); 66 path.lineTo(SkIntToScalar(30), SkIntToScalar(30));
66 path.lineTo(SkIntToScalar(80), SkIntToScalar(20)); 67 path.lineTo(SkIntToScalar(80), SkIntToScalar(20));
67 canvas->drawPath(path, paint); 68 canvas->drawPath(path, paint);
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
128 path.lineTo(SkIntToScalar(80), SkIntToScalar(20)); 129 path.lineTo(SkIntToScalar(80), SkIntToScalar(20));
129 path.lineTo(SkIntToScalar(80), SkIntToScalar(80)); 130 path.lineTo(SkIntToScalar(80), SkIntToScalar(80));
130 path.lineTo(SkIntToScalar(20), SkIntToScalar(80)); 131 path.lineTo(SkIntToScalar(20), SkIntToScalar(80));
131 path.moveTo(SkIntToScalar(30), SkIntToScalar(30)); 132 path.moveTo(SkIntToScalar(30), SkIntToScalar(30));
132 path.lineTo(SkIntToScalar(30), SkIntToScalar(70)); 133 path.lineTo(SkIntToScalar(30), SkIntToScalar(70));
133 path.lineTo(SkIntToScalar(70), SkIntToScalar(70)); 134 path.lineTo(SkIntToScalar(70), SkIntToScalar(70));
134 path.lineTo(SkIntToScalar(70), SkIntToScalar(30)); 135 path.lineTo(SkIntToScalar(70), SkIntToScalar(30));
135 canvas->drawPath(path, paint); 136 canvas->drawPath(path, paint);
136 canvas->restore(); 137 canvas->restore();
137 } 138 }
139 // Star test (self-intersecting)
bsalomon 2015/01/20 15:12:24 should we make this guy a GM instead of a Sample?
Stephen White 2015/01/20 18:54:15 Done.
140 if (1) {
141 SkPath path;
142 canvas->save();
143 canvas->translate(300, 100);
144 path.moveTo(30, 20);
145 path.lineTo(50, 80);
146 path.lineTo(70, 20);
147 path.lineTo(20, 57);
148 path.lineTo(80, 57);
149 path.close();
150 canvas->drawPath(path, paint);
151 canvas->restore();
152 }
153 // Stairstep with repeated vert (intersection)
154 if (1) {
155 SkPath path;
156 canvas->save();
157 canvas->translate(0, 200);
158 path.moveTo(SkIntToScalar(50), SkIntToScalar(50));
159 path.lineTo(SkIntToScalar(50), SkIntToScalar(20));
160 path.lineTo(SkIntToScalar(80), SkIntToScalar(20));
161 path.lineTo(SkIntToScalar(50), SkIntToScalar(50));
162 path.lineTo(SkIntToScalar(20), SkIntToScalar(50));
163 path.lineTo(SkIntToScalar(20), SkIntToScalar(80));
164 canvas->drawPath(path, paint);
165 canvas->restore();
166 }
167 // Stairstep intersection without repeated vert.
168 if (1) {
169 SkPath path;
170 canvas->save();
171 canvas->translate(100, 200);
172 path.moveTo(20, 60);
173 path.lineTo(35, 80);
174 path.lineTo(50, 60);
175 path.lineTo(65, 80);
176 path.lineTo(80, 60);
177 canvas->drawPath(path, paint);
178 canvas->restore();
179 }
180 // Overlapping segments
181 if (1) {
182 SkPath path;
183 canvas->save();
184 canvas->translate(200, 200);
185 path.moveTo(SkIntToScalar(20), SkIntToScalar(80));
186 path.lineTo(SkIntToScalar(80), SkIntToScalar(80));
187 path.lineTo(SkIntToScalar(80), SkIntToScalar(20));
188 path.lineTo(SkIntToScalar(80), SkIntToScalar(30));
189 canvas->drawPath(path, paint);
190 canvas->restore();
191 }
192 // Monotone test 1 (point in the middle)
193 if (1) {
194 SkPath path;
195 canvas->save();
196 canvas->translate(0, 300);
197 path.moveTo(SkIntToScalar(20), SkIntToScalar(20));
198 path.quadTo(SkIntToScalar(20), SkIntToScalar(50),
199 SkIntToScalar(80), SkIntToScalar(50));
200 path.quadTo(SkIntToScalar(20), SkIntToScalar(50),
201 SkIntToScalar(20), SkIntToScalar(80));
202 canvas->drawPath(path, paint);
203 canvas->restore();
204 }
205 // Monotone test 2 (point at the top)
206 if (1) {
207 SkPath path;
208 canvas->save();
209 canvas->translate(100, 300);
210 path.moveTo(SkIntToScalar(20), SkIntToScalar(20));
211 path.lineTo(SkIntToScalar(80), SkIntToScalar(30));
212 path.quadTo(SkIntToScalar(20), SkIntToScalar(20),
213 SkIntToScalar(20), SkIntToScalar(80));
214 canvas->drawPath(path, paint);
215 canvas->restore();
216 }
217 // Monotone test 3 (point at the bottom)
218 if (1) {
219 SkPath path;
220 canvas->save();
221 canvas->translate(200, 300);
222 path.moveTo(SkIntToScalar(20), SkIntToScalar(80));
223 path.lineTo(SkIntToScalar(80), SkIntToScalar(70));
224 path.quadTo(SkIntToScalar(20), SkIntToScalar(80),
225 SkIntToScalar(20), SkIntToScalar(20));
226 canvas->drawPath(path, paint);
227 canvas->restore();
228 }
229 // Monotone test 4 (merging of two monotones)
230 if (1) {
231 SkPath path;
232 canvas->save();
233 canvas->translate(300, 300);
234 path.moveTo(80, 25);
235 path.lineTo(50, 39);
236 path.lineTo(20, 25);
237 path.lineTo(40, 45);
238 path.lineTo(70, 50);
239 path.lineTo(80, 80);
240 canvas->drawPath(path, paint);
241 canvas->restore();
242 }
243 // Monotone test 5 (aborted merging of two monotones)
244 if (1) {
245 SkPath path;
246 canvas->save();
247 canvas->translate(0, 400);
248 path.moveTo(50, 20);
249 path.lineTo(80, 80);
250 path.lineTo(50, 50);
251 path.lineTo(20, 80);
252 canvas->drawPath(path, paint);
253 canvas->restore();
254 }
255 // Degenerate intersection test
256 if (1) {
257 SkPath path;
258 canvas->save();
259 canvas->translate(100, 400);
260 path.moveTo(50, 20);
261 path.lineTo(70, 30);
262 path.lineTo(20, 50);
263 path.moveTo(50, 20);
264 path.lineTo(80, 80);
265 path.lineTo(50, 80);
266 canvas->drawPath(path, paint);
267 canvas->restore();
268 }
269 // Two triangles with a coincident edge.
270 if (1) {
271 SkPath path;
272 canvas->save();
273 canvas->translate(200, 400);
274
275 path.moveTo(80, 20);
276 path.lineTo(80, 80);
277 path.lineTo(20, 80);
278
279 path.moveTo(20, 20);
280 path.lineTo(80, 80);
281 path.lineTo(20, 80);
282
283 canvas->drawPath(path, paint);
284 canvas->restore();
285 }
286 // Bowtie with a coincident vertex.
287 if (1) {
288 SkPath path;
289 canvas->save();
290 canvas->translate(300, 400);
291 path.moveTo(SkIntToScalar(20), SkIntToScalar(20));
292 path.lineTo(SkIntToScalar(80), SkIntToScalar(80));
293 path.lineTo(SkIntToScalar(80), SkIntToScalar(20));
294 path.lineTo(SkIntToScalar(20), SkIntToScalar(80));
295 path.moveTo(SkIntToScalar(50), SkIntToScalar(50));
296 path.lineTo(SkIntToScalar(80), SkIntToScalar(20));
297 path.lineTo(SkIntToScalar(80), SkIntToScalar(80));
298 canvas->drawPath(path, paint);
299 canvas->restore();
300 }
301 // Coincident edges (big ones first, coincident vert on top).
302 if (1) {
303 SkPath path;
304 canvas->save();
305 canvas->translate(0, 500);
306 path.moveTo(SkIntToScalar(20), SkIntToScalar(20));
307 path.lineTo(SkIntToScalar(80), SkIntToScalar(80));
308 path.lineTo(SkIntToScalar(20), SkIntToScalar(80));
309 path.moveTo(SkIntToScalar(20), SkIntToScalar(20));
310 path.lineTo(SkIntToScalar(50), SkIntToScalar(50));
311 path.lineTo(SkIntToScalar(20), SkIntToScalar(50));
312 canvas->drawPath(path, paint);
313 canvas->restore();
314 }
315 // Coincident edges (small ones first, coincident vert on top).
316 if (1) {
317 SkPath path;
318 canvas->save();
319 canvas->translate(100, 500);
320 path.moveTo(SkIntToScalar(20), SkIntToScalar(20));
321 path.lineTo(SkIntToScalar(50), SkIntToScalar(50));
322 path.lineTo(SkIntToScalar(20), SkIntToScalar(50));
323 path.moveTo(SkIntToScalar(20), SkIntToScalar(20));
324 path.lineTo(SkIntToScalar(80), SkIntToScalar(80));
325 path.lineTo(SkIntToScalar(20), SkIntToScalar(80));
326 canvas->drawPath(path, paint);
327 canvas->restore();
328 }
329 // Coincident edges (small ones first, coincident vert on bottom).
330 if (1) {
331 SkPath path;
332 canvas->save();
333 canvas->translate(200, 500);
334 path.moveTo(SkIntToScalar(20), SkIntToScalar(80));
335 path.lineTo(SkIntToScalar(20), SkIntToScalar(50));
336 path.lineTo(SkIntToScalar(50), SkIntToScalar(50));
337 path.moveTo(SkIntToScalar(20), SkIntToScalar(80));
338 path.lineTo(SkIntToScalar(20), SkIntToScalar(20));
339 path.lineTo(SkIntToScalar(80), SkIntToScalar(20));
340 canvas->drawPath(path, paint);
341 canvas->restore();
342 }
343 // Coincident edges (big ones first, coincident vert on bottom).
344 if (1) {
345 SkPath path;
346 canvas->save();
347 canvas->translate(300, 500);
348 path.moveTo(SkIntToScalar(20), SkIntToScalar(80));
349 path.lineTo(SkIntToScalar(20), SkIntToScalar(20));
350 path.lineTo(SkIntToScalar(80), SkIntToScalar(20));
351 path.moveTo(SkIntToScalar(20), SkIntToScalar(80));
352 path.lineTo(SkIntToScalar(20), SkIntToScalar(50));
353 path.lineTo(SkIntToScalar(50), SkIntToScalar(50));
354 canvas->drawPath(path, paint);
355 canvas->restore();
356 }
138 } 357 }
139 358
140 virtual SkView::Click* onFindClickHandler(SkScalar x, SkScalar y, 359 virtual SkView::Click* onFindClickHandler(SkScalar x, SkScalar y,
141 unsigned modi) { 360 unsigned modi) {
142 this->inval(NULL); 361 this->inval(NULL);
143 return this->INHERITED::onFindClickHandler(x, y, modi); 362 return this->INHERITED::onFindClickHandler(x, y, modi);
144 } 363 }
145 364
146 private: 365 private:
147 typedef SampleView INHERITED; 366 typedef SampleView INHERITED;
148 }; 367 };
149 368
150 ////////////////////////////////////////////////////////////////////////////// 369 //////////////////////////////////////////////////////////////////////////////
151 370
152 static SkView* MyFactory() { return new ConcavePathView; } 371 static SkView* MyFactory() { return new ConcavePathView; }
153 static SkViewRegister reg(MyFactory); 372 static SkViewRegister reg(MyFactory);
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698