aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/utils/SkMatrix44.cpp
diff options
context:
space:
mode:
authorGravatar commit-bot@chromium.org <commit-bot@chromium.org@2bbb7eff-a529-9590-31e7-b0007b416f81>2013-10-29 21:08:51 +0000
committerGravatar commit-bot@chromium.org <commit-bot@chromium.org@2bbb7eff-a529-9590-31e7-b0007b416f81>2013-10-29 21:08:51 +0000
commit658e28b0810d01dc03f8c48b93f6659d41f25b09 (patch)
tree72670337dd82c524cc77d9885c21e8bdd5d83ad7 /src/utils/SkMatrix44.cpp
parent950923b43761c10d9c8ffc1dfc0c878100d1e702 (diff)
Remove SkMatrix44 float conversions without precision loss
BUG=none R=reed@google.com Author: enne@chromium.org Review URL: https://codereview.chromium.org/50423004 git-svn-id: http://skia.googlecode.com/svn/trunk@12009 2bbb7eff-a529-9590-31e7-b0007b416f81
Diffstat (limited to 'src/utils/SkMatrix44.cpp')
-rw-r--r--src/utils/SkMatrix44.cpp25
1 files changed, 9 insertions, 16 deletions
diff --git a/src/utils/SkMatrix44.cpp b/src/utils/SkMatrix44.cpp
index 37ab8db27f..440bf36b62 100644
--- a/src/utils/SkMatrix44.cpp
+++ b/src/utils/SkMatrix44.cpp
@@ -229,14 +229,8 @@ void SkMatrix44::preTranslate(SkMScalar dx, SkMScalar dy, SkMScalar dz) {
return;
}
- const double X = SkMScalarToDouble(dx);
- const double Y = SkMScalarToDouble(dy);
- const double Z = SkMScalarToDouble(dz);
-
- double tmp;
for (int i = 0; i < 4; ++i) {
- tmp = fMat[0][i] * X + fMat[1][i] * Y + fMat[2][i] * Z + fMat[3][i];
- fMat[3][i] = SkDoubleToMScalar(tmp);
+ fMat[3][i] = fMat[0][i] * dx + fMat[1][i] * dy + fMat[2][i] * dz + fMat[3][i];
}
this->dirtyTypeMask();
}
@@ -783,10 +777,10 @@ static void map2_sd(const SkMScalar mat[][4], const double* SK_RESTRICT src2,
static void map2_af(const SkMScalar mat[][4], const float* SK_RESTRICT src2,
int count, float* SK_RESTRICT dst4) {
- double r;
+ SkMScalar r;
for (int n = 0; n < count; ++n) {
- double sx = src2[0];
- double sy = src2[1];
+ SkMScalar sx = SkFloatToMScalar(src2[0]);
+ SkMScalar sy = SkFloatToMScalar(src2[1]);
r = mat[0][0] * sx + mat[1][0] * sy + mat[3][0];
dst4[0] = SkMScalarToFloat(r);
r = mat[0][1] * sx + mat[1][1] * sy + mat[3][1];
@@ -815,14 +809,13 @@ static void map2_ad(const SkMScalar mat[][4], const double* SK_RESTRICT src2,
static void map2_pf(const SkMScalar mat[][4], const float* SK_RESTRICT src2,
int count, float* SK_RESTRICT dst4) {
+ SkMScalar r;
for (int n = 0; n < count; ++n) {
- float sx = src2[0];
- float sy = src2[1];
+ SkMScalar sx = SkFloatToMScalar(src2[0]);
+ SkMScalar sy = SkFloatToMScalar(src2[1]);
for (int i = 0; i < 4; i++) {
- dst4[i] =
- SkMScalarToFloat(mat[0][i]) * sx +
- SkMScalarToFloat(mat[1][i]) * sy +
- SkMScalarToFloat(mat[3][i]);
+ r = mat[0][i] * sx + mat[1][i] * sy + mat[3][i];
+ dst4[i] = SkMScalarToFloat(r);
}
src2 += 2;
dst4 += 4;