aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/core/SkAnalyticEdge.h
diff options
context:
space:
mode:
authorGravatar Yuqian Li <liyuqian@google.com>2017-01-18 10:51:26 -0500
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2017-01-18 20:04:59 +0000
commitce7e18f548cf8af0bc7c3950824221c5c08e1e25 (patch)
treef388c07049430924da340d3489a5b0cec8dd5ccd /src/core/SkAnalyticEdge.h
parent8461506c8b025522eb89cd754c63fb5dbf0cb7f1 (diff)
Reject horizontal edges in FDot6 precision
This simplifies the slope computation because we don't have to check dy != 0. BUG=skia: Change-Id: I5c09a9217ceed65f81f9d82cb045e33a70218077 Reviewed-on: https://skia-review.googlesource.com/7180 Commit-Queue: Yuqian Li <liyuqian@google.com> Reviewed-by: Cary Clark <caryclark@google.com>
Diffstat (limited to 'src/core/SkAnalyticEdge.h')
-rw-r--r--src/core/SkAnalyticEdge.h14
1 files changed, 8 insertions, 6 deletions
diff --git a/src/core/SkAnalyticEdge.h b/src/core/SkAnalyticEdge.h
index e2a9867d0f..c5f0a02a2d 100644
--- a/src/core/SkAnalyticEdge.h
+++ b/src/core/SkAnalyticEdge.h
@@ -147,11 +147,6 @@ bool SkAnalyticEdge::setLine(const SkPoint& p0, const SkPoint& p1) {
SkFixed x1 = SkFDot6ToFixed(SkScalarToFDot6(p1.fX * multiplier)) >> accuracy;
SkFixed y1 = SnapY(SkFDot6ToFixed(SkScalarToFDot6(p1.fY * multiplier)) >> accuracy);
- // are we a zero-height line?
- if (y0 == y1) {
- return false;
- }
-
int winding = 1;
if (y0 > y1) {
@@ -160,12 +155,19 @@ bool SkAnalyticEdge::setLine(const SkPoint& p0, const SkPoint& p1) {
winding = -1;
}
+ // are we a zero-height line?
#ifdef SK_SUPPORT_LEGACY_AAA
+ if (y0 == y1) {
+ return false;
+ }
SkFixed slope = SkFixedDiv(x1 - x0, y1 - y0);
#else
SkFDot6 dy = SkFixedToFDot6(y1 - y0);
+ if (dy == 0) {
+ return false;
+ }
SkFDot6 dx = SkFixedToFDot6(x1 - x0);
- SkFixed slope = dy ? QuickSkFDot6Div(dx, dy) : SK_MaxS32;
+ SkFixed slope = QuickSkFDot6Div(dx, dy);
SkFixed absSlope = SkAbs32(slope);
#endif