Index: src/utils/SkPatchUtils.cpp |
diff --git a/src/utils/SkPatchUtils.cpp b/src/utils/SkPatchUtils.cpp |
index ad846f7ba20d739a78f3a10d2554da5f77c9671f..9d095ae5cfdaff33c9a483e120e1fc3ae4486219 100644 |
--- a/src/utils/SkPatchUtils.cpp |
+++ b/src/utils/SkPatchUtils.cpp |
@@ -30,34 +30,15 @@ |
class FwDCubicEvaluator { |
public: |
- FwDCubicEvaluator() |
- : fMax(0) |
- , fCurrent(0) |
- , fDivisions(0) { |
- memset(fPoints, 0, 4 * sizeof(SkPoint)); |
- memset(fPoints, 0, 4 * sizeof(SkPoint)); |
- memset(fPoints, 0, 4 * sizeof(SkPoint)); |
- } |
/** |
* Receives the 4 control points of the cubic bezier. |
*/ |
- FwDCubicEvaluator(SkPoint a, SkPoint b, SkPoint c, SkPoint d) { |
- fPoints[0] = a; |
- fPoints[1] = b; |
- fPoints[2] = c; |
- fPoints[3] = d; |
- |
- SkCubicToCoeff(fPoints, fCoefs); |
- |
- this->restart(1); |
- } |
- explicit FwDCubicEvaluator(const SkPoint points[4]) { |
+ explicit FwDCubicEvaluator(const SkPoint points[4]) |
+ : fCoefs(points) { |
memcpy(fPoints, points, 4 * sizeof(SkPoint)); |
- SkCubicToCoeff(fPoints, fCoefs); |
- |
this->restart(1); |
} |
@@ -66,18 +47,16 @@ public: |
*/ |
void restart(int divisions) { |
fDivisions = divisions; |
- SkScalar h = 1.f / fDivisions; |
fCurrent = 0; |
fMax = fDivisions + 1; |
- fFwDiff[0] = fCoefs[3]; |
- SkScalar h2 = h * h; |
- SkScalar h3 = h2 * h; |
- |
- fFwDiff[3].set(6.f * fCoefs[0].x() * h3, 6.f * fCoefs[0].y() * h3); //6ah^3 |
- fFwDiff[2].set(fFwDiff[3].x() + 2.f * fCoefs[1].x() * h2, //6ah^3 + 2bh^2 |
- fFwDiff[3].y() + 2.f * fCoefs[1].y() * h2); |
- fFwDiff[1].set(fCoefs[0].x() * h3 + fCoefs[1].x() * h2 + fCoefs[2].x() * h,//ah^3 + bh^2 +ch |
- fCoefs[0].y() * h3 + fCoefs[1].y() * h2 + fCoefs[2].y() * h); |
+ Sk2s h = Sk2s(1.f / fDivisions); |
+ Sk2s h2 = h * h; |
+ Sk2s h3 = h2 * h; |
+ Sk2s fwDiff3 = Sk2s(6) * fCoefs.fA * h3; |
+ fFwDiff[3] = to_point(fwDiff3); |
+ fFwDiff[2] = to_point(fwDiff3 + times_2(fCoefs.fB) * h2); |
+ fFwDiff[1] = to_point(fCoefs.fA * h3 + fCoefs.fB * h2 + fCoefs.fC * h); |
+ fFwDiff[0] = to_point(fCoefs.fD); |
} |
/** |
@@ -104,8 +83,9 @@ public: |
} |
private: |
+ SkCubicCoeff fCoefs; |
int fMax, fCurrent, fDivisions; |
- SkPoint fFwDiff[4], fCoefs[4], fPoints[4]; |
+ SkPoint fFwDiff[4], fPoints[4]; |
}; |
//////////////////////////////////////////////////////////////////////////////// |