Index: src/core/SkEdgeClipper.cpp |
diff --git a/src/core/SkEdgeClipper.cpp b/src/core/SkEdgeClipper.cpp |
index 87bfbb9b5c27f945e883dd31699280d9ad7db356..96fac6121f317c59b1b5c0f63957517aa801b9fe 100644 |
--- a/src/core/SkEdgeClipper.cpp |
+++ b/src/core/SkEdgeClipper.cpp |
@@ -225,79 +225,18 @@ bool SkEdgeClipper::clipQuad(const SkPoint srcPts[3], const SkRect& clip) { |
/////////////////////////////////////////////////////////////////////////////// |
-#ifdef SK_SUPPORT_LEGACY_CUBIC_CHOPPER |
-static SkScalar eval_cubic_coeff(SkScalar A, SkScalar B, SkScalar C, |
- SkScalar D, SkScalar t) { |
- return SkScalarMulAdd(SkScalarMulAdd(SkScalarMulAdd(A, t, B), t, C), t, D); |
-} |
- |
-/* Given 4 cubic points (either Xs or Ys), and a target X or Y, compute the |
- t value such that cubic(t) = target |
- */ |
-static bool chopMonoCubicAt(SkScalar c0, SkScalar c1, SkScalar c2, SkScalar c3, |
- SkScalar target, SkScalar* t) { |
- // SkASSERT(c0 <= c1 && c1 <= c2 && c2 <= c3); |
- SkASSERT(c0 < target && target < c3); |
- |
- SkScalar D = c0 - target; |
- SkScalar A = c3 + 3*(c1 - c2) - c0; |
- SkScalar B = 3*(c2 - c1 - c1 + c0); |
- SkScalar C = 3*(c1 - c0); |
- |
- const SkScalar TOLERANCE = SK_Scalar1 / 4096; |
- SkScalar minT = 0; |
- SkScalar maxT = SK_Scalar1; |
- SkScalar mid; |
- |
- // This is a lot of iterations. Is there a faster way? |
- for (int i = 0; i < 24; i++) { |
- mid = SkScalarAve(minT, maxT); |
- SkScalar delta = eval_cubic_coeff(A, B, C, D, mid); |
- if (delta < 0) { |
- minT = mid; |
- delta = -delta; |
- } else { |
- maxT = mid; |
- } |
- if (delta < TOLERANCE) { |
- break; |
- } |
- } |
- *t = mid; |
-// SkDebugf("-- evalCubicAt %d delta %g\n", i, eval_cubic_coeff(A, B, C, D, *t)); |
- return true; |
-} |
- |
-static bool chopMonoCubicAtY(SkPoint pts[4], SkScalar y, SkScalar* t) { |
- return chopMonoCubicAt(pts[0].fY, pts[1].fY, pts[2].fY, pts[3].fY, y, t); |
-} |
- |
-static bool chopMonoCubicAtX(SkPoint pts[4], SkScalar x, SkScalar* t) { |
- return chopMonoCubicAt(pts[0].fX, pts[1].fX, pts[2].fX, pts[3].fX, x, t); |
-} |
-#endif |
- |
// Modify pts[] in place so that it is clipped in Y to the clip rect |
static void chop_cubic_in_Y(SkPoint pts[4], const SkRect& clip) { |
// are we partially above |
if (pts[0].fY < clip.fTop) { |
SkPoint tmp[7]; |
-#ifdef SK_SUPPORT_LEGACY_CUBIC_CHOPPER |
- SkScalar t; |
- if (chopMonoCubicAtY(pts, clip.fTop, &t)) { |
- SkChopCubicAt(pts, tmp, t); |
-#else |
if (SkChopMonoCubicAtY(pts, clip.fTop, tmp)) { |
-#endif |
// tmp[3, 4].fY should all be to the below clip.fTop. |
// Since we can't trust the numerics of |
// the chopper, we force those conditions now |
tmp[3].fY = clip.fTop; |
clamp_ge(tmp[4].fY, clip.fTop); |
-#ifdef SK_SUPPORT_LEGACY_CUBIC_CHOPPER |
- clamp_ge(tmp[5].fY, clip.fTop); |
-#endif |
pts[0] = tmp[3]; |
pts[1] = tmp[4]; |
@@ -314,13 +253,7 @@ static void chop_cubic_in_Y(SkPoint pts[4], const SkRect& clip) { |
// are we partially below |
if (pts[3].fY > clip.fBottom) { |
SkPoint tmp[7]; |
-#ifdef SK_SUPPORT_LEGACY_CUBIC_CHOPPER |
- SkScalar t; |
- if (chopMonoCubicAtY(pts, clip.fBottom, &t)) { |
- SkChopCubicAt(pts, tmp, t); |
-#else |
if (SkChopMonoCubicAtY(pts, clip.fBottom, tmp)) { |
-#endif |
tmp[3].fY = clip.fBottom; |
clamp_le(tmp[2].fY, clip.fBottom); |
@@ -372,13 +305,7 @@ void SkEdgeClipper::clipMonoCubic(const SkPoint src[4], const SkRect& clip) { |
// are we partially to the left |
if (pts[0].fX < clip.fLeft) { |
SkPoint tmp[7]; |
-#ifdef SK_SUPPORT_LEGACY_CUBIC_CHOPPER |
- SkScalar t; |
- if (chopMonoCubicAtX(pts, clip.fLeft, &t)) { |
- SkChopCubicAt(pts, tmp, t); |
-#else |
if (SkChopMonoCubicAtX(pts, clip.fLeft, tmp)) { |
-#endif |
this->appendVLine(clip.fLeft, tmp[0].fY, tmp[3].fY, reverse); |
// tmp[3, 4].fX should all be to the right of clip.fLeft. |
@@ -386,9 +313,6 @@ void SkEdgeClipper::clipMonoCubic(const SkPoint src[4], const SkRect& clip) { |
// the chopper, we force those conditions now |
tmp[3].fX = clip.fLeft; |
clamp_ge(tmp[4].fX, clip.fLeft); |
-#ifdef SK_SUPPORT_LEGACY_CUBIC_CHOPPER |
- clamp_ge(tmp[5].fX, clip.fLeft); |
-#endif |
pts[0] = tmp[3]; |
pts[1] = tmp[4]; |
@@ -404,18 +328,9 @@ void SkEdgeClipper::clipMonoCubic(const SkPoint src[4], const SkRect& clip) { |
// are we partially to the right |
if (pts[3].fX > clip.fRight) { |
SkPoint tmp[7]; |
-#ifdef SK_SUPPORT_LEGACY_CUBIC_CHOPPER |
- SkScalar t; |
- if (chopMonoCubicAtX(pts, clip.fRight, &t)) { |
- SkChopCubicAt(pts, tmp, t); |
-#else |
if (SkChopMonoCubicAtX(pts, clip.fRight, tmp)) { |
-#endif |
tmp[3].fX = clip.fRight; |
clamp_le(tmp[2].fX, clip.fRight); |
-#ifdef SK_SUPPORT_LEGACY_CUBIC_CHOPPER |
- clamp_le(tmp[1].fX, clip.fRight); |
-#endif |
this->appendCubic(tmp, reverse); |
this->appendVLine(clip.fRight, tmp[3].fY, tmp[6].fY, reverse); |