| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2011 Google Inc. | 2 * Copyright 2011 Google Inc. |
| 3 * | 3 * |
| 4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
| 5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
| 6 */ | 6 */ |
| 7 | 7 |
| 8 #include "SkMatrix44.h" | 8 #include "SkMatrix44.h" |
| 9 | 9 |
| 10 static inline bool eq4(const SkMScalar* SK_RESTRICT a, | 10 static inline bool eq4(const SkMScalar* SK_RESTRICT a, |
| (...skipping 211 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 222 fMat[3][1] = dy; | 222 fMat[3][1] = dy; |
| 223 fMat[3][2] = dz; | 223 fMat[3][2] = dz; |
| 224 this->setTypeMask(kTranslate_Mask); | 224 this->setTypeMask(kTranslate_Mask); |
| 225 } | 225 } |
| 226 | 226 |
| 227 void SkMatrix44::preTranslate(SkMScalar dx, SkMScalar dy, SkMScalar dz) { | 227 void SkMatrix44::preTranslate(SkMScalar dx, SkMScalar dy, SkMScalar dz) { |
| 228 if (!dx && !dy && !dz) { | 228 if (!dx && !dy && !dz) { |
| 229 return; | 229 return; |
| 230 } | 230 } |
| 231 | 231 |
| 232 const double X = SkMScalarToDouble(dx); | |
| 233 const double Y = SkMScalarToDouble(dy); | |
| 234 const double Z = SkMScalarToDouble(dz); | |
| 235 | |
| 236 double tmp; | |
| 237 for (int i = 0; i < 4; ++i) { | 232 for (int i = 0; i < 4; ++i) { |
| 238 tmp = fMat[0][i] * X + fMat[1][i] * Y + fMat[2][i] * Z + fMat[3][i]; | 233 fMat[3][i] = fMat[0][i] * dx + fMat[1][i] * dy + fMat[2][i] * dz + fMat[
3][i]; |
| 239 fMat[3][i] = SkDoubleToMScalar(tmp); | |
| 240 } | 234 } |
| 241 this->dirtyTypeMask(); | 235 this->dirtyTypeMask(); |
| 242 } | 236 } |
| 243 | 237 |
| 244 void SkMatrix44::postTranslate(SkMScalar dx, SkMScalar dy, SkMScalar dz) { | 238 void SkMatrix44::postTranslate(SkMScalar dx, SkMScalar dy, SkMScalar dz) { |
| 245 if (!dx && !dy && !dz) { | 239 if (!dx && !dy && !dz) { |
| 246 return; | 240 return; |
| 247 } | 241 } |
| 248 | 242 |
| 249 if (this->getType() & kPerspective_Mask) { | 243 if (this->getType() & kPerspective_Mask) { |
| (...skipping 526 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 776 dst4[1] = mat[1][1] * src2[1] + mat[3][1]; | 770 dst4[1] = mat[1][1] * src2[1] + mat[3][1]; |
| 777 dst4[2] = mat[3][2]; | 771 dst4[2] = mat[3][2]; |
| 778 dst4[3] = 1; | 772 dst4[3] = 1; |
| 779 src2 += 2; | 773 src2 += 2; |
| 780 dst4 += 4; | 774 dst4 += 4; |
| 781 } | 775 } |
| 782 } | 776 } |
| 783 | 777 |
| 784 static void map2_af(const SkMScalar mat[][4], const float* SK_RESTRICT src2, | 778 static void map2_af(const SkMScalar mat[][4], const float* SK_RESTRICT src2, |
| 785 int count, float* SK_RESTRICT dst4) { | 779 int count, float* SK_RESTRICT dst4) { |
| 786 double r; | 780 SkMScalar r; |
| 787 for (int n = 0; n < count; ++n) { | 781 for (int n = 0; n < count; ++n) { |
| 788 double sx = src2[0]; | 782 SkMScalar sx = SkFloatToMScalar(src2[0]); |
| 789 double sy = src2[1]; | 783 SkMScalar sy = SkFloatToMScalar(src2[1]); |
| 790 r = mat[0][0] * sx + mat[1][0] * sy + mat[3][0]; | 784 r = mat[0][0] * sx + mat[1][0] * sy + mat[3][0]; |
| 791 dst4[0] = SkMScalarToFloat(r); | 785 dst4[0] = SkMScalarToFloat(r); |
| 792 r = mat[0][1] * sx + mat[1][1] * sy + mat[3][1]; | 786 r = mat[0][1] * sx + mat[1][1] * sy + mat[3][1]; |
| 793 dst4[1] = SkMScalarToFloat(r); | 787 dst4[1] = SkMScalarToFloat(r); |
| 794 r = mat[0][2] * sx + mat[1][2] * sy + mat[3][2]; | 788 r = mat[0][2] * sx + mat[1][2] * sy + mat[3][2]; |
| 795 dst4[2] = SkMScalarToFloat(r); | 789 dst4[2] = SkMScalarToFloat(r); |
| 796 dst4[3] = 1; | 790 dst4[3] = 1; |
| 797 src2 += 2; | 791 src2 += 2; |
| 798 dst4 += 4; | 792 dst4 += 4; |
| 799 } | 793 } |
| 800 } | 794 } |
| 801 | 795 |
| 802 static void map2_ad(const SkMScalar mat[][4], const double* SK_RESTRICT src2, | 796 static void map2_ad(const SkMScalar mat[][4], const double* SK_RESTRICT src2, |
| 803 int count, double* SK_RESTRICT dst4) { | 797 int count, double* SK_RESTRICT dst4) { |
| 804 for (int n = 0; n < count; ++n) { | 798 for (int n = 0; n < count; ++n) { |
| 805 double sx = src2[0]; | 799 double sx = src2[0]; |
| 806 double sy = src2[1]; | 800 double sy = src2[1]; |
| 807 dst4[0] = mat[0][0] * sx + mat[1][0] * sy + mat[3][0]; | 801 dst4[0] = mat[0][0] * sx + mat[1][0] * sy + mat[3][0]; |
| 808 dst4[1] = mat[0][1] * sx + mat[1][1] * sy + mat[3][1]; | 802 dst4[1] = mat[0][1] * sx + mat[1][1] * sy + mat[3][1]; |
| 809 dst4[2] = mat[0][2] * sx + mat[1][2] * sy + mat[3][2]; | 803 dst4[2] = mat[0][2] * sx + mat[1][2] * sy + mat[3][2]; |
| 810 dst4[3] = 1; | 804 dst4[3] = 1; |
| 811 src2 += 2; | 805 src2 += 2; |
| 812 dst4 += 4; | 806 dst4 += 4; |
| 813 } | 807 } |
| 814 } | 808 } |
| 815 | 809 |
| 816 static void map2_pf(const SkMScalar mat[][4], const float* SK_RESTRICT src2, | 810 static void map2_pf(const SkMScalar mat[][4], const float* SK_RESTRICT src2, |
| 817 int count, float* SK_RESTRICT dst4) { | 811 int count, float* SK_RESTRICT dst4) { |
| 812 SkMScalar r; |
| 818 for (int n = 0; n < count; ++n) { | 813 for (int n = 0; n < count; ++n) { |
| 819 float sx = src2[0]; | 814 SkMScalar sx = SkFloatToMScalar(src2[0]); |
| 820 float sy = src2[1]; | 815 SkMScalar sy = SkFloatToMScalar(src2[1]); |
| 821 for (int i = 0; i < 4; i++) { | 816 for (int i = 0; i < 4; i++) { |
| 822 dst4[i] = | 817 r = mat[0][i] * sx + mat[1][i] * sy + mat[3][i]; |
| 823 SkMScalarToFloat(mat[0][i]) * sx + | 818 dst4[i] = SkMScalarToFloat(r); |
| 824 SkMScalarToFloat(mat[1][i]) * sy + | |
| 825 SkMScalarToFloat(mat[3][i]); | |
| 826 } | 819 } |
| 827 src2 += 2; | 820 src2 += 2; |
| 828 dst4 += 4; | 821 dst4 += 4; |
| 829 } | 822 } |
| 830 } | 823 } |
| 831 | 824 |
| 832 static void map2_pd(const SkMScalar mat[][4], const double* SK_RESTRICT src2, | 825 static void map2_pd(const SkMScalar mat[][4], const double* SK_RESTRICT src2, |
| 833 int count, double* SK_RESTRICT dst4) { | 826 int count, double* SK_RESTRICT dst4) { |
| 834 for (int n = 0; n < count; ++n) { | 827 for (int n = 0; n < count; ++n) { |
| 835 double sx = src2[0]; | 828 double sx = src2[0]; |
| (...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 928 dst[SkMatrix::kMSkewY] = SkMScalarToScalar(fMat[0][1]); | 921 dst[SkMatrix::kMSkewY] = SkMScalarToScalar(fMat[0][1]); |
| 929 dst[SkMatrix::kMScaleY] = SkMScalarToScalar(fMat[1][1]); | 922 dst[SkMatrix::kMScaleY] = SkMScalarToScalar(fMat[1][1]); |
| 930 dst[SkMatrix::kMTransY] = SkMScalarToScalar(fMat[3][1]); | 923 dst[SkMatrix::kMTransY] = SkMScalarToScalar(fMat[3][1]); |
| 931 | 924 |
| 932 dst[SkMatrix::kMPersp0] = SkMScalarToScalar(fMat[0][3]); | 925 dst[SkMatrix::kMPersp0] = SkMScalarToScalar(fMat[0][3]); |
| 933 dst[SkMatrix::kMPersp1] = SkMScalarToScalar(fMat[1][3]); | 926 dst[SkMatrix::kMPersp1] = SkMScalarToScalar(fMat[1][3]); |
| 934 dst[SkMatrix::kMPersp2] = SkMScalarToScalar(fMat[3][3]); | 927 dst[SkMatrix::kMPersp2] = SkMScalarToScalar(fMat[3][3]); |
| 935 | 928 |
| 936 return dst; | 929 return dst; |
| 937 } | 930 } |
| OLD | NEW |