| Index: src/core/SkMatrix.cpp
|
| diff --git a/src/core/SkMatrix.cpp b/src/core/SkMatrix.cpp
|
| index 36e735309bb4739bf66ead50fd2571dd8af75cf3..29d0bc1d734f51b9d7b693923866fa5d27835117 100644
|
| --- a/src/core/SkMatrix.cpp
|
| +++ b/src/core/SkMatrix.cpp
|
| @@ -1227,6 +1227,43 @@ void SkMatrix::mapPoints(SkPoint dst[], const SkPoint src[], int count) const {
|
|
|
| ///////////////////////////////////////////////////////////////////////////////
|
|
|
| +void SkMatrix::Homogeneous_pts(const SkMatrix& m, SkScalar dst[],
|
| + const SkScalar src[], int count) {
|
| + if (count > 0) {
|
| + do {
|
| + SkScalar sx = src[0];
|
| + SkScalar sy = src[1];
|
| + SkScalar sw = src[2];
|
| + src += 3;
|
| +
|
| + SkScalar x = SkScalarMul(sx, m.fMat[kMScaleX]) +
|
| + SkScalarMul(sy, m.fMat[kMSkewX]) +
|
| + SkScalarMul(sw, m.fMat[kMTransX]);
|
| + SkScalar y = SkScalarMul(sx, m.fMat[kMSkewY]) +
|
| + SkScalarMul(sy, m.fMat[kMScaleY]) +
|
| + SkScalarMul(sw, m.fMat[kMTransY]);
|
| + SkScalar w = SkScalarMul(sx, m.fMat[kMPersp0]) +
|
| + SkScalarMul(sy, m.fMat[kMPersp1]) +
|
| + SkScalarMul(sw, m.fMat[kMPersp2]);
|
| +
|
| + dst[0] = x;
|
| + dst[1] = y;
|
| + dst[2] = w;
|
| + dst += 3;
|
| + } while (--count);
|
| + }
|
| +}
|
| +
|
| +void SkMatrix::mapHomogeneousPoints(SkScalar dst[], const SkScalar src[], int count) const {
|
| + SkASSERT((dst && src && count > 0) || count == 0);
|
| + // no partial overlap
|
| + SkASSERT(src == dst || SkAbs32((int32_t)(src - dst)) >= 3*count);
|
| +
|
| + SkMatrix::Homogeneous_pts(*this, dst, src, count);
|
| +}
|
| +
|
| +///////////////////////////////////////////////////////////////////////////////
|
| +
|
| void SkMatrix::mapVectors(SkPoint dst[], const SkPoint src[], int count) const {
|
| if (this->hasPerspective()) {
|
| SkPoint origin;
|
|
|