Chromium Code Reviews| 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 801 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 812 dst4 += 4; | 812 dst4 += 4; |
| 813 } | 813 } |
| 814 } | 814 } |
| 815 | 815 |
| 816 static void map2_pf(const SkMScalar mat[][4], const float* SK_RESTRICT src2, | 816 static void map2_pf(const SkMScalar mat[][4], const float* SK_RESTRICT src2, |
| 817 int count, float* SK_RESTRICT dst4) { | 817 int count, float* SK_RESTRICT dst4) { |
| 818 for (int n = 0; n < count; ++n) { | 818 for (int n = 0; n < count; ++n) { |
| 819 float sx = src2[0]; | 819 float sx = src2[0]; |
| 820 float sy = src2[1]; | 820 float sy = src2[1]; |
| 821 for (int i = 0; i < 4; i++) { | 821 for (int i = 0; i < 4; i++) { |
| 822 dst4[i] = mat[0][i] * sx + mat[1][i] * sy + mat[3][i]; | 822 dst4[i] = |
| 823 SkMScalarToFloat(mat[0][i]) * sx + | |
|
reed1
2013/10/29 14:58:52
This technique throws away all of the precision be
epoger
2013/10/29 15:18:30
Thanks for catching this, Mike.
Do you think it's
enne (OOO)
2013/10/29 16:56:37
When SkMScalar is a float, map2_af's technique is
| |
| 824 SkMScalarToFloat(mat[1][i]) * sy + | |
| 825 SkMScalarToFloat(mat[3][i]); | |
| 823 } | 826 } |
| 824 src2 += 2; | 827 src2 += 2; |
| 825 dst4 += 4; | 828 dst4 += 4; |
| 826 } | 829 } |
| 827 } | 830 } |
| 828 | 831 |
| 829 static void map2_pd(const SkMScalar mat[][4], const double* SK_RESTRICT src2, | 832 static void map2_pd(const SkMScalar mat[][4], const double* SK_RESTRICT src2, |
| 830 int count, double* SK_RESTRICT dst4) { | 833 int count, double* SK_RESTRICT dst4) { |
| 831 for (int n = 0; n < count; ++n) { | 834 for (int n = 0; n < count; ++n) { |
| 832 double sx = src2[0]; | 835 double sx = src2[0]; |
| (...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 925 dst[SkMatrix::kMSkewY] = SkMScalarToScalar(fMat[0][1]); | 928 dst[SkMatrix::kMSkewY] = SkMScalarToScalar(fMat[0][1]); |
| 926 dst[SkMatrix::kMScaleY] = SkMScalarToScalar(fMat[1][1]); | 929 dst[SkMatrix::kMScaleY] = SkMScalarToScalar(fMat[1][1]); |
| 927 dst[SkMatrix::kMTransY] = SkMScalarToScalar(fMat[3][1]); | 930 dst[SkMatrix::kMTransY] = SkMScalarToScalar(fMat[3][1]); |
| 928 | 931 |
| 929 dst[SkMatrix::kMPersp0] = SkMScalarToScalar(fMat[0][3]); | 932 dst[SkMatrix::kMPersp0] = SkMScalarToScalar(fMat[0][3]); |
| 930 dst[SkMatrix::kMPersp1] = SkMScalarToScalar(fMat[1][3]); | 933 dst[SkMatrix::kMPersp1] = SkMScalarToScalar(fMat[1][3]); |
| 931 dst[SkMatrix::kMPersp2] = SkMScalarToScalar(fMat[3][3]); | 934 dst[SkMatrix::kMPersp2] = SkMScalarToScalar(fMat[3][3]); |
| 932 | 935 |
| 933 return dst; | 936 return dst; |
| 934 } | 937 } |
| OLD | NEW |