diff options
author | Greg Daniel <egdaniel@google.com> | 2018-04-03 14:53:45 -0400 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2018-04-03 19:38:01 +0000 |
commit | 8b09b96266d053715c278c07756be819f25d025a (patch) | |
tree | 48ce4bdfd14f8e0c858ef77be6a99d9ee9231f67 /src/gpu/ops | |
parent | 63bd23a8b143ecafc8b43e89f79fc497871cf135 (diff) |
Drop draw in GrAAConvextPathRenderer if calculation of center of mass ends up in NaN
Bug: skia:7770
Change-Id: If27494f5df0b5d5ba037e1d21c06bff98019d2b0
Reviewed-on: https://skia-review.googlesource.com/118300
Commit-Queue: Greg Daniel <egdaniel@google.com>
Reviewed-by: Brian Salomon <bsalomon@google.com>
Diffstat (limited to 'src/gpu/ops')
-rw-r--r-- | src/gpu/ops/GrAAConvexPathRenderer.cpp | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/src/gpu/ops/GrAAConvexPathRenderer.cpp b/src/gpu/ops/GrAAConvexPathRenderer.cpp index c238d102e4..8ca022263b 100644 --- a/src/gpu/ops/GrAAConvexPathRenderer.cpp +++ b/src/gpu/ops/GrAAConvexPathRenderer.cpp @@ -64,7 +64,7 @@ struct Segment { typedef SkTArray<Segment, true> SegmentArray; -static void center_of_mass(const SegmentArray& segments, SkPoint* c) { +static bool center_of_mass(const SegmentArray& segments, SkPoint* c) { SkScalar area = 0; SkPoint center = {0, 0}; int count = segments.count(); @@ -111,15 +111,17 @@ static void center_of_mass(const SegmentArray& segments, SkPoint* c) { // undo the translate of p0 to the origin. *c = center + p0; } - SkASSERT(!SkScalarIsNaN(c->fX) && !SkScalarIsNaN(c->fY)); + return !SkScalarIsNaN(c->fX) && !SkScalarIsNaN(c->fY); } -static void compute_vectors(SegmentArray* segments, +static bool compute_vectors(SegmentArray* segments, SkPoint* fanPt, SkPathPriv::FirstDirection dir, int* vCount, int* iCount) { - center_of_mass(*segments, fanPt); + if (!center_of_mass(*segments, fanPt)) { + return false; + } int count = segments->count(); // Make the normals point towards the outside @@ -167,6 +169,7 @@ static void compute_vectors(SegmentArray* segments, *vCount += 4; *iCount += 6; } + return true; } struct DegenerateTestData { @@ -325,8 +328,7 @@ static bool get_segments(const SkPath& path, if (degenerateData.isDegenerate()) { return false; } else { - compute_vectors(segments, fanPt, dir, vCount, iCount); - return true; + return compute_vectors(segments, fanPt, dir, vCount, iCount); } default: break; |