diff options
author | Jim Van Verth <jvanverth@google.com> | 2018-02-26 13:54:34 -0500 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2018-02-26 20:02:38 +0000 |
commit | a947e29bfda69618723341f3487076c3256cfffc (patch) | |
tree | 65117ad34586c4e246ccc65dd7c7aa37ac7a9b06 /src/utils/SkShadowTessellator.cpp | |
parent | 1693d43f37ee17d647eccc3533ceb695aef1e338 (diff) |
Add some additional checks for shadow generation
Change-Id: I4dae4173ad879827e4e1fa3ad12aa0447d1df252
Reviewed-on: https://skia-review.googlesource.com/110360
Reviewed-by: Brian Salomon <bsalomon@google.com>
Commit-Queue: Jim Van Verth <jvanverth@google.com>
Diffstat (limited to 'src/utils/SkShadowTessellator.cpp')
-rwxr-xr-x | src/utils/SkShadowTessellator.cpp | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/src/utils/SkShadowTessellator.cpp b/src/utils/SkShadowTessellator.cpp index 11e8f2d5c6..57bf5851fa 100755 --- a/src/utils/SkShadowTessellator.cpp +++ b/src/utils/SkShadowTessellator.cpp @@ -177,6 +177,12 @@ void SkBaseShadowTessellator::handleLine(const SkMatrix& m, SkPoint* p) { void SkBaseShadowTessellator::handleQuad(const SkPoint pts[3]) { #if SK_SUPPORT_GPU + // check for degeneracy + SkVector v0 = pts[1] - pts[0]; + SkVector v1 = pts[2] - pts[0]; + if (SkScalarNearlyZero(v0.cross(v1))) { + return; + } // TODO: Pull PathUtils out of Ganesh? int maxCount = GrPathUtils::quadraticPointCount(pts, kQuadTolerance); fPointBuffer.setReserve(maxCount); @@ -277,7 +283,7 @@ bool SkBaseShadowTessellator::setTransformedHeightFunc(const SkMatrix& ctm) { }; } else { SkMatrix ctmInverse; - if (!ctm.invert(&ctmInverse)) { + if (!ctm.invert(&ctmInverse) || !ctmInverse.isFinite()) { return false; } // multiply by transpose |