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

Unified 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 side-by-side diff with in-line comments
Download patch
Index: samplecode/SampleConcavePaths.cpp
diff --git a/samplecode/SampleConcavePaths.cpp b/samplecode/SampleConcavePaths.cpp
index 2fc01076d2b9a40ec2e5634397f66a485b70161c..cb6a74f780cb1b602e4e281692a408c580dbafea 100644
--- a/samplecode/SampleConcavePaths.cpp
+++ b/samplecode/SampleConcavePaths.cpp
@@ -55,6 +55,7 @@ protected:
path.lineTo(SkIntToScalar(20), SkIntToScalar(80));
canvas->drawPath(path, paint);
}
+
// Reverse concave test
if (1) {
SkPath path;
@@ -135,6 +136,224 @@ protected:
canvas->drawPath(path, paint);
canvas->restore();
}
+ // 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.
+ if (1) {
+ SkPath path;
+ canvas->save();
+ canvas->translate(300, 100);
+ path.moveTo(30, 20);
+ path.lineTo(50, 80);
+ path.lineTo(70, 20);
+ path.lineTo(20, 57);
+ path.lineTo(80, 57);
+ path.close();
+ canvas->drawPath(path, paint);
+ canvas->restore();
+ }
+ // Stairstep with repeated vert (intersection)
+ if (1) {
+ SkPath path;
+ canvas->save();
+ canvas->translate(0, 200);
+ path.moveTo(SkIntToScalar(50), SkIntToScalar(50));
+ path.lineTo(SkIntToScalar(50), SkIntToScalar(20));
+ path.lineTo(SkIntToScalar(80), SkIntToScalar(20));
+ path.lineTo(SkIntToScalar(50), SkIntToScalar(50));
+ path.lineTo(SkIntToScalar(20), SkIntToScalar(50));
+ path.lineTo(SkIntToScalar(20), SkIntToScalar(80));
+ canvas->drawPath(path, paint);
+ canvas->restore();
+ }
+ // Stairstep intersection without repeated vert.
+ if (1) {
+ SkPath path;
+ canvas->save();
+ canvas->translate(100, 200);
+ path.moveTo(20, 60);
+ path.lineTo(35, 80);
+ path.lineTo(50, 60);
+ path.lineTo(65, 80);
+ path.lineTo(80, 60);
+ canvas->drawPath(path, paint);
+ canvas->restore();
+ }
+ // Overlapping segments
+ if (1) {
+ SkPath path;
+ canvas->save();
+ canvas->translate(200, 200);
+ path.moveTo(SkIntToScalar(20), SkIntToScalar(80));
+ path.lineTo(SkIntToScalar(80), SkIntToScalar(80));
+ path.lineTo(SkIntToScalar(80), SkIntToScalar(20));
+ path.lineTo(SkIntToScalar(80), SkIntToScalar(30));
+ canvas->drawPath(path, paint);
+ canvas->restore();
+ }
+ // Monotone test 1 (point in the middle)
+ if (1) {
+ SkPath path;
+ canvas->save();
+ canvas->translate(0, 300);
+ path.moveTo(SkIntToScalar(20), SkIntToScalar(20));
+ path.quadTo(SkIntToScalar(20), SkIntToScalar(50),
+ SkIntToScalar(80), SkIntToScalar(50));
+ path.quadTo(SkIntToScalar(20), SkIntToScalar(50),
+ SkIntToScalar(20), SkIntToScalar(80));
+ canvas->drawPath(path, paint);
+ canvas->restore();
+ }
+ // Monotone test 2 (point at the top)
+ if (1) {
+ SkPath path;
+ canvas->save();
+ canvas->translate(100, 300);
+ path.moveTo(SkIntToScalar(20), SkIntToScalar(20));
+ path.lineTo(SkIntToScalar(80), SkIntToScalar(30));
+ path.quadTo(SkIntToScalar(20), SkIntToScalar(20),
+ SkIntToScalar(20), SkIntToScalar(80));
+ canvas->drawPath(path, paint);
+ canvas->restore();
+ }
+ // Monotone test 3 (point at the bottom)
+ if (1) {
+ SkPath path;
+ canvas->save();
+ canvas->translate(200, 300);
+ path.moveTo(SkIntToScalar(20), SkIntToScalar(80));
+ path.lineTo(SkIntToScalar(80), SkIntToScalar(70));
+ path.quadTo(SkIntToScalar(20), SkIntToScalar(80),
+ SkIntToScalar(20), SkIntToScalar(20));
+ canvas->drawPath(path, paint);
+ canvas->restore();
+ }
+ // Monotone test 4 (merging of two monotones)
+ if (1) {
+ SkPath path;
+ canvas->save();
+ canvas->translate(300, 300);
+ path.moveTo(80, 25);
+ path.lineTo(50, 39);
+ path.lineTo(20, 25);
+ path.lineTo(40, 45);
+ path.lineTo(70, 50);
+ path.lineTo(80, 80);
+ canvas->drawPath(path, paint);
+ canvas->restore();
+ }
+ // Monotone test 5 (aborted merging of two monotones)
+ if (1) {
+ SkPath path;
+ canvas->save();
+ canvas->translate(0, 400);
+ path.moveTo(50, 20);
+ path.lineTo(80, 80);
+ path.lineTo(50, 50);
+ path.lineTo(20, 80);
+ canvas->drawPath(path, paint);
+ canvas->restore();
+ }
+ // Degenerate intersection test
+ if (1) {
+ SkPath path;
+ canvas->save();
+ canvas->translate(100, 400);
+ path.moveTo(50, 20);
+ path.lineTo(70, 30);
+ path.lineTo(20, 50);
+ path.moveTo(50, 20);
+ path.lineTo(80, 80);
+ path.lineTo(50, 80);
+ canvas->drawPath(path, paint);
+ canvas->restore();
+ }
+ // Two triangles with a coincident edge.
+ if (1) {
+ SkPath path;
+ canvas->save();
+ canvas->translate(200, 400);
+
+ path.moveTo(80, 20);
+ path.lineTo(80, 80);
+ path.lineTo(20, 80);
+
+ path.moveTo(20, 20);
+ path.lineTo(80, 80);
+ path.lineTo(20, 80);
+
+ canvas->drawPath(path, paint);
+ canvas->restore();
+ }
+ // Bowtie with a coincident vertex.
+ if (1) {
+ SkPath path;
+ canvas->save();
+ canvas->translate(300, 400);
+ path.moveTo(SkIntToScalar(20), SkIntToScalar(20));
+ path.lineTo(SkIntToScalar(80), SkIntToScalar(80));
+ path.lineTo(SkIntToScalar(80), SkIntToScalar(20));
+ path.lineTo(SkIntToScalar(20), SkIntToScalar(80));
+ path.moveTo(SkIntToScalar(50), SkIntToScalar(50));
+ path.lineTo(SkIntToScalar(80), SkIntToScalar(20));
+ path.lineTo(SkIntToScalar(80), SkIntToScalar(80));
+ canvas->drawPath(path, paint);
+ canvas->restore();
+ }
+ // Coincident edges (big ones first, coincident vert on top).
+ if (1) {
+ SkPath path;
+ canvas->save();
+ canvas->translate(0, 500);
+ path.moveTo(SkIntToScalar(20), SkIntToScalar(20));
+ path.lineTo(SkIntToScalar(80), SkIntToScalar(80));
+ path.lineTo(SkIntToScalar(20), SkIntToScalar(80));
+ path.moveTo(SkIntToScalar(20), SkIntToScalar(20));
+ path.lineTo(SkIntToScalar(50), SkIntToScalar(50));
+ path.lineTo(SkIntToScalar(20), SkIntToScalar(50));
+ canvas->drawPath(path, paint);
+ canvas->restore();
+ }
+ // Coincident edges (small ones first, coincident vert on top).
+ if (1) {
+ SkPath path;
+ canvas->save();
+ canvas->translate(100, 500);
+ path.moveTo(SkIntToScalar(20), SkIntToScalar(20));
+ path.lineTo(SkIntToScalar(50), SkIntToScalar(50));
+ path.lineTo(SkIntToScalar(20), SkIntToScalar(50));
+ path.moveTo(SkIntToScalar(20), SkIntToScalar(20));
+ path.lineTo(SkIntToScalar(80), SkIntToScalar(80));
+ path.lineTo(SkIntToScalar(20), SkIntToScalar(80));
+ canvas->drawPath(path, paint);
+ canvas->restore();
+ }
+ // Coincident edges (small ones first, coincident vert on bottom).
+ if (1) {
+ SkPath path;
+ canvas->save();
+ canvas->translate(200, 500);
+ path.moveTo(SkIntToScalar(20), SkIntToScalar(80));
+ path.lineTo(SkIntToScalar(20), SkIntToScalar(50));
+ path.lineTo(SkIntToScalar(50), SkIntToScalar(50));
+ path.moveTo(SkIntToScalar(20), SkIntToScalar(80));
+ path.lineTo(SkIntToScalar(20), SkIntToScalar(20));
+ path.lineTo(SkIntToScalar(80), SkIntToScalar(20));
+ canvas->drawPath(path, paint);
+ canvas->restore();
+ }
+ // Coincident edges (big ones first, coincident vert on bottom).
+ if (1) {
+ SkPath path;
+ canvas->save();
+ canvas->translate(300, 500);
+ path.moveTo(SkIntToScalar(20), SkIntToScalar(80));
+ path.lineTo(SkIntToScalar(20), SkIntToScalar(20));
+ path.lineTo(SkIntToScalar(80), SkIntToScalar(20));
+ path.moveTo(SkIntToScalar(20), SkIntToScalar(80));
+ path.lineTo(SkIntToScalar(20), SkIntToScalar(50));
+ path.lineTo(SkIntToScalar(50), SkIntToScalar(50));
+ canvas->drawPath(path, paint);
+ canvas->restore();
+ }
}
virtual SkView::Click* onFindClickHandler(SkScalar x, SkScalar y,

Powered by Google App Engine
This is Rietveld 408576698