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

Unified Diff: gm/convexpaths.cpp

Issue 23034003: Fix repeated point quads/cubics in convex pr and update convexpaths GM (Closed) Base URL: https://skia.googlecode.com/svn/trunk
Patch Set: Update for Rob's comments Created 7 years, 4 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
« no previous file with comments | « no previous file | src/gpu/GrAAConvexPathRenderer.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: gm/convexpaths.cpp
diff --git a/gm/convexpaths.cpp b/gm/convexpaths.cpp
index a354bd4cef3489c9419b3682bb790cb261bda75f..4b3c7b6b478daa585a2e7a8a68626e3fe6701ef7 100644
--- a/gm/convexpaths.cpp
+++ b/gm/convexpaths.cpp
@@ -48,32 +48,18 @@ protected:
return;
}
fOnce.accomplished();
- // CW
+
fPaths.push_back().moveTo(0, 0);
fPaths.back().quadTo(50 * SK_Scalar1, 100 * SK_Scalar1,
0, 100 * SK_Scalar1);
fPaths.back().lineTo(0, 0);
- // CCW
- fPaths.push_back().moveTo(0, 0);
- fPaths.back().lineTo(0, 100 * SK_Scalar1);
- fPaths.back().quadTo(50 * SK_Scalar1, 100 * SK_Scalar1,
- 0, 0);
-
- // CW
fPaths.push_back().moveTo(0, 50 * SK_Scalar1);
fPaths.back().quadTo(50 * SK_Scalar1, 0,
100 * SK_Scalar1, 50 * SK_Scalar1);
fPaths.back().quadTo(50 * SK_Scalar1, 100 * SK_Scalar1,
0, 50 * SK_Scalar1);
- // CCW
- fPaths.push_back().moveTo(0, 50 * SK_Scalar1);
- fPaths.back().quadTo(50 * SK_Scalar1, 100 * SK_Scalar1,
- 100 * SK_Scalar1, 50 * SK_Scalar1);
- fPaths.back().quadTo(50 * SK_Scalar1, 0,
- 0, 50 * SK_Scalar1);
-
fPaths.push_back().addRect(0, 0,
100 * SK_Scalar1, 100 * SK_Scalar1,
SkPath::kCW_Direction);
@@ -85,8 +71,6 @@ protected:
fPaths.push_back().addCircle(50 * SK_Scalar1, 50 * SK_Scalar1,
50 * SK_Scalar1, SkPath::kCW_Direction);
- fPaths.push_back().addCircle(50 * SK_Scalar1, 50 * SK_Scalar1,
- 40 * SK_Scalar1, SkPath::kCCW_Direction);
fPaths.push_back().addOval(SkRect::MakeXYWH(0, 0,
50 * SK_Scalar1,
@@ -95,18 +79,13 @@ protected:
fPaths.push_back().addOval(SkRect::MakeXYWH(0, 0,
100 * SK_Scalar1,
- 50 * SK_Scalar1),
- SkPath::kCCW_Direction);
-
- fPaths.push_back().addOval(SkRect::MakeXYWH(0, 0,
- 100 * SK_Scalar1,
5 * SK_Scalar1),
SkPath::kCCW_Direction);
fPaths.push_back().addOval(SkRect::MakeXYWH(0, 0,
SK_Scalar1,
100 * SK_Scalar1),
- SkPath::kCCW_Direction);
+ SkPath::kCCW_Direction);
fPaths.push_back().addRoundRect(SkRect::MakeXYWH(0, 0,
SK_Scalar1 * 100,
@@ -114,12 +93,6 @@ protected:
40 * SK_Scalar1, 20 * SK_Scalar1,
SkPath::kCW_Direction);
- fPaths.push_back().addRoundRect(SkRect::MakeXYWH(0, 0,
- SK_Scalar1 * 100,
- SK_Scalar1 * 100),
- 20 * SK_Scalar1, 40 * SK_Scalar1,
- SkPath::kCCW_Direction);
-
// large number of points
enum {
kLength = 100,
@@ -144,12 +117,10 @@ protected:
fPaths.back().lineTo(98 * SK_Scalar1, 100 * SK_Scalar1);
fPaths.back().lineTo(3 * SK_Scalar1, 96 * SK_Scalar1);
- //It turns out arcTos are not automatically marked as convex and they
- //may in fact be ever so slightly concave.
- //fPaths.push_back().arcTo(SkRect::MakeXYWH(0, 0,
- // 50 * SK_Scalar1,
- // 100 * SK_Scalar1),
- // 25 * SK_Scalar1, 130 * SK_Scalar1, false);
+ fPaths.push_back().arcTo(SkRect::MakeXYWH(0, 0,
+ 50 * SK_Scalar1,
+ 100 * SK_Scalar1),
+ 25 * SK_Scalar1, 130 * SK_Scalar1, false);
// cubics
fPaths.push_back().cubicTo( 1 * SK_Scalar1, 1 * SK_Scalar1,
@@ -211,13 +182,49 @@ protected:
fPaths.back().lineTo(100 * SK_Scalar1, 100 * SK_Scalar1);
fPaths.back().lineTo(SkFloatToScalar(8.59375f), 45 * SK_Scalar1);
- // point degenerate
+ // triangle where one edge is a quad with a repeated point
+ fPaths.push_back().moveTo(0, 25 * SK_Scalar1);
+ fPaths.back().lineTo(50 * SK_Scalar1, 0);
+ fPaths.back().quadTo(50 * SK_Scalar1, 50 * SK_Scalar1, 50 * SK_Scalar1, 50 * SK_Scalar1);
+
+ // triangle where one edge is a cubic with a 2x repeated point
+ fPaths.push_back().moveTo(0, 25 * SK_Scalar1);
+ fPaths.back().lineTo(50 * SK_Scalar1, 0);
+ fPaths.back().cubicTo(50 * SK_Scalar1, 0,
+ 50 * SK_Scalar1, 50 * SK_Scalar1,
+ 50 * SK_Scalar1, 50 * SK_Scalar1);
+
+ // triangle where one edge is a quad with a nearly repeated point
+ fPaths.push_back().moveTo(0, 25 * SK_Scalar1);
+ fPaths.back().lineTo(50 * SK_Scalar1, 0);
+ fPaths.back().quadTo(50 * SK_Scalar1, SkFloatToScalar(49.95f),
+ 50 * SK_Scalar1, 50 * SK_Scalar1);
+
+ // triangle where one edge is a cubic with a 3x nearly repeated point
+ fPaths.push_back().moveTo(0, 25 * SK_Scalar1);
+ fPaths.back().lineTo(50 * SK_Scalar1, 0);
+ fPaths.back().cubicTo(50 * SK_Scalar1, SkFloatToScalar(49.95f),
+ 50 * SK_Scalar1, SkFloatToScalar(49.97f),
+ 50 * SK_Scalar1, 50 * SK_Scalar1);
+
+ // triangle where there is a point degenerate cubic at one corner
+ fPaths.push_back().moveTo(0, 25 * SK_Scalar1);
+ fPaths.back().lineTo(50 * SK_Scalar1, 0);
+ fPaths.back().lineTo(50 * SK_Scalar1, 50 * SK_Scalar1);
+ fPaths.back().cubicTo(50 * SK_Scalar1, 50 * SK_Scalar1,
+ 50 * SK_Scalar1, 50 * SK_Scalar1,
+ 50 * SK_Scalar1, 50 * SK_Scalar1);
+
+ // point line
fPaths.push_back().moveTo(50 * SK_Scalar1, 50 * SK_Scalar1);
fPaths.back().lineTo(50 * SK_Scalar1, 50 * SK_Scalar1);
+ // point quad
fPaths.push_back().moveTo(50 * SK_Scalar1, 50 * SK_Scalar1);
fPaths.back().quadTo(50 * SK_Scalar1, 50 * SK_Scalar1,
50 * SK_Scalar1, 50 * SK_Scalar1);
+
+ // point cubic
fPaths.push_back().moveTo(50 * SK_Scalar1, 50 * SK_Scalar1);
fPaths.back().cubicTo(50 * SK_Scalar1, 50 * SK_Scalar1,
50 * SK_Scalar1, 50 * SK_Scalar1,
@@ -246,7 +253,7 @@ protected:
// small circle. This is listed last so that it has device coords far
// from the origin (small area relative to x,y values).
- fPaths.push_back().addCircle(0, 0, SkFloatToScalar(0.8f));
+ fPaths.push_back().addCircle(0, 0, SkFloatToScalar(1.2f));
}
virtual void onDraw(SkCanvas* canvas) {
@@ -256,11 +263,15 @@ protected:
paint.setAntiAlias(true);
SkRandom rand;
canvas->translate(20 * SK_Scalar1, 20 * SK_Scalar1);
+
+ // As we've added more paths this has gotten pretty big. Scale the whole thing down.
+ canvas->scale(2 * SK_Scalar1 / 3, 2 * SK_Scalar1 / 3);
+
for (int i = 0; i < fPaths.count(); ++i) {
canvas->save();
// position the path, and make it at off-integer coords.
- canvas->translate(SK_Scalar1 * 200 * (i % 5) + SK_Scalar1 / 4,
- SK_Scalar1 * 200 * (i / 5) + 3 * SK_Scalar1 / 4);
+ canvas->translate(SK_Scalar1 * 200 * (i % 5) + SK_Scalar1 / 10,
+ SK_Scalar1 * 200 * (i / 5) + 9 * SK_Scalar1 / 10);
SkColor color = rand.nextU();
color |= 0xff000000;
paint.setColor(color);
« no previous file with comments | « no previous file | src/gpu/GrAAConvexPathRenderer.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698