aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar Brian Osman <brianosman@google.com>2017-09-18 13:13:48 +0000
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2017-09-18 14:59:49 +0000
commit205a1267605f6d47855146dfa8f2eed4c4368bd8 (patch)
treefdb1e01cd8da150029029e8d9915f7581cab22f1
parentfb0fcb2579b420ac136bac434d35e0b38e926c44 (diff)
Revert "Revert "Don't ignore degenerates when deciding if a path is convex""
This reverts commit f95352322496796ce4c99df9582dbc630fe8a327. Reason for revert: Re-landing now that gold has settled. Original change's description: > Revert "Don't ignore degenerates when deciding if a path is convex" > > This reverts commit 53cd6c4331a2ef21a7c5eb6166c782cd33178a7b. > > Reason for revert: Temporary to limit gold cross-talk with other CLs. > > Original change's description: > > Don't ignore degenerates when deciding if a path is convex > > > > This ensures that a path with a second contour will always be marked > > concave. GrDefaultPathRenderer was incorrectly drawing paths of this type > > (thinking that it could fill them with simple triangulation). > > > > Bug: skia:7020 skia:1460 > > Change-Id: I62bfd72e4c61da427687acf53c552357b57707aa > > Reviewed-on: https://skia-review.googlesource.com/47082 > > Reviewed-by: Cary Clark <caryclark@google.com> > > Commit-Queue: Brian Osman <brianosman@google.com> > > TBR=bsalomon@google.com,brianosman@google.com,caryclark@google.com,reed@google.com > > Change-Id: Id7d121633faeb8a43dbd334409408ba51db43d68 > No-Presubmit: true > No-Tree-Checks: true > No-Try: true > Bug: skia:7020 skia:1460 > Reviewed-on: https://skia-review.googlesource.com/47343 > Reviewed-by: Brian Osman <brianosman@google.com> > Commit-Queue: Brian Osman <brianosman@google.com> TBR=bsalomon@google.com,brianosman@google.com,caryclark@google.com,reed@google.com # Not skipping CQ checks because original CL landed > 1 day ago. Bug: skia:7020 skia:1460 Change-Id: I45ff90a54b66ce9ea068f246d066cc24b310c966 Reviewed-on: https://skia-review.googlesource.com/47820 Reviewed-by: Brian Osman <brianosman@google.com> Commit-Queue: Brian Osman <brianosman@google.com>
-rw-r--r--src/core/SkPath.cpp2
-rw-r--r--tests/PathTest.cpp15
2 files changed, 7 insertions, 10 deletions
diff --git a/src/core/SkPath.cpp b/src/core/SkPath.cpp
index 99d7e1a66e..19592211ce 100644
--- a/src/core/SkPath.cpp
+++ b/src/core/SkPath.cpp
@@ -2476,7 +2476,7 @@ SkPath::Convexity SkPath::internalGetConvexity() const {
if (!isFinite()) {
return kUnknown_Convexity;
}
- while ((verb = iter.next(pts, true, true)) != SkPath::kDone_Verb) {
+ while ((verb = iter.next(pts, false, false)) != SkPath::kDone_Verb) {
switch (verb) {
case kMove_Verb:
if (++contourCount > 1) {
diff --git a/tests/PathTest.cpp b/tests/PathTest.cpp
index 75e86e3f92..8c629d9485 100644
--- a/tests/PathTest.cpp
+++ b/tests/PathTest.cpp
@@ -1880,15 +1880,10 @@ static void test_conservativelyContains(skiatest::Reporter* reporter) {
// Test that multiple move commands do not cause asserts.
-
- // At the time of writing, this would not modify cached convexity. This caused an assert while
- // checking conservative containment again. https://bug.skia.org/1460
path.moveTo(SkIntToScalar(100), SkIntToScalar(100));
-#if 0
REPORTER_ASSERT(reporter, path.conservativelyContainsRect(SkRect::MakeXYWH(SkIntToScalar(50), 0,
SkIntToScalar(10),
SkIntToScalar(10))));
-#endif
// Same as above path and first test but with an extra moveTo.
path.reset();
@@ -1896,10 +1891,12 @@ static void test_conservativelyContains(skiatest::Reporter* reporter) {
path.moveTo(0, 0);
path.lineTo(SkIntToScalar(100), 0);
path.lineTo(0, SkIntToScalar(100));
-
- REPORTER_ASSERT(reporter, path.conservativelyContainsRect(SkRect::MakeXYWH(SkIntToScalar(50), 0,
- SkIntToScalar(10),
- SkIntToScalar(10))));
+ // Convexity logic is now more conservative, so that multiple (non-trailing) moveTos make a
+ // path non-convex.
+ REPORTER_ASSERT(reporter, !path.conservativelyContainsRect(
+ SkRect::MakeXYWH(SkIntToScalar(50), 0,
+ SkIntToScalar(10),
+ SkIntToScalar(10))));
// Same as above path and first test but with the extra moveTo making a degenerate sub-path
// following the non-empty sub-path. Verifies that this does not trigger assertions.