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>
This commit is contained in:
parent
63bd23a8b1
commit
8b09b96266
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user