Chromium Code Reviews| Index: src/core/SkStroke.cpp |
| diff --git a/src/core/SkStroke.cpp b/src/core/SkStroke.cpp |
| index e04d14aea5adcf84f95f1c83bfd1ad1404702564..c50d599d1ed5184ca50ecf9550354bf01c478827 100644 |
| --- a/src/core/SkStroke.cpp |
| +++ b/src/core/SkStroke.cpp |
| @@ -836,14 +836,12 @@ SkPathStroker::ResultType SkPathStroker::intersectRay(SkQuadConstruct* quadPts, |
| return STROKER_RESULT(kSplit_ResultType, depth, quadPts, |
| "(numerA=%g >= 0) == (numerB=%g >= 0)", numerA, numerB); |
| } |
| - // check to see if the denomerator is teeny relative to the numerator |
| - bool validDivide = SkScalarAbs(numerA) * SK_ScalarNearlyZero < SkScalarAbs(denom); |
| -// the divide check is the same as checking if the scaled denom is nearly zero |
| -// (commented out because on some platforms the two are not bit-identical) |
| -// SkASSERT(!SkScalarNearlyZero(denom / numerA) == validDivide); |
| + // check to see if the denominator is teeny relative to the numerator |
| + // if the ratio isn't finite, or if the offset by one will be lost, the ratio is too large |
| + numerA /= denom; |
| + bool validDivide = SkScalarIsFinite(numerA) && numerA != numerA - 1; |
|
reed1
2015/11/30 21:24:13
nit: is "numerA > (numerA - 1)" clearer?
I certain
|
| if (validDivide) { |
| if (kCtrlPt_RayType == intersectRayType) { |
| - numerA /= denom; |
| SkPoint* ctrlPt = &quadPts->fQuad[1]; |
| // the intersection of the tangents need not be on the tangent segment |
| // so 0 <= numerA <= 1 is not necessarily true |