diff --git a/bench/Matrix44Bench.cpp b/bench/Matrix44Bench.cpp index a990763b62..98025f1544 100644 --- a/bench/Matrix44Bench.cpp +++ b/bench/Matrix44Bench.cpp @@ -116,22 +116,22 @@ public: , fM0(SkMatrix44::kUninitialized_Constructor) , fM1(SkMatrix44::kUninitialized_Constructor) { - fM0.set(0, 0, -1.1); - fM0.set(0, 1, 2.1); - fM0.set(0, 2, -3.1); - fM0.set(0, 3, 4.1); - fM0.set(1, 0, 5.1); - fM0.set(1, 1, -6.1); - fM0.set(1, 2, 7.1); - fM0.set(1, 3, 8.1); - fM0.set(2, 0, -9.1); - fM0.set(2, 1, 10.1); - fM0.set(2, 2, 11.1); - fM0.set(2, 3, -12.1); - fM0.set(3, 0, -13.1); - fM0.set(3, 1, 14.1); - fM0.set(3, 2, -15.1); - fM0.set(3, 3, 16.1); + fM0.setDouble(0, 0, -1.1); + fM0.setDouble(0, 1, 2.1); + fM0.setDouble(0, 2, -3.1); + fM0.setDouble(0, 3, 4.1); + fM0.setDouble(1, 0, 5.1); + fM0.setDouble(1, 1, -6.1); + fM0.setDouble(1, 2, 7.1); + fM0.setDouble(1, 3, 8.1); + fM0.setDouble(2, 0, -9.1); + fM0.setDouble(2, 1, 10.1); + fM0.setDouble(2, 2, 11.1); + fM0.setDouble(2, 3, -12.1); + fM0.setDouble(3, 0, -13.1); + fM0.setDouble(3, 1, 14.1); + fM0.setDouble(3, 2, -15.1); + fM0.setDouble(3, 3, 16.1); } protected: virtual void performTest() { @@ -151,18 +151,18 @@ public: , fM0(SkMatrix44::kIdentity_Constructor) , fM1(SkMatrix44::kUninitialized_Constructor) { - fM0.set(0, 0, -1.1); - fM0.set(0, 1, 2.1); - fM0.set(0, 2, -3.1); - fM0.set(0, 3, 4.1); - fM0.set(1, 0, 5.1); - fM0.set(1, 1, -6.1); - fM0.set(1, 2, 7.1); - fM0.set(1, 3, 8.1); - fM0.set(2, 0, -9.1); - fM0.set(2, 1, 10.1); - fM0.set(2, 2, 11.1); - fM0.set(2, 3, -12.1); + fM0.setDouble(0, 0, -1.1); + fM0.setDouble(0, 1, 2.1); + fM0.setDouble(0, 2, -3.1); + fM0.setDouble(0, 3, 4.1); + fM0.setDouble(1, 0, 5.1); + fM0.setDouble(1, 1, -6.1); + fM0.setDouble(1, 2, 7.1); + fM0.setDouble(1, 3, 8.1); + fM0.setDouble(2, 0, -9.1); + fM0.setDouble(2, 1, 10.1); + fM0.setDouble(2, 2, 11.1); + fM0.setDouble(2, 3, -12.1); // bottom row (perspective component) remains (0, 0, 0, 1). } protected: @@ -183,14 +183,14 @@ public: , fM0(SkMatrix44::kIdentity_Constructor) , fM1(SkMatrix44::kUninitialized_Constructor) { - fM0.set(0, 0, -1.1); - fM0.set(0, 3, 4.1); + fM0.setDouble(0, 0, -1.1); + fM0.setDouble(0, 3, 4.1); - fM0.set(1, 1, -6.1); - fM0.set(1, 3, 8.1); + fM0.setDouble(1, 1, -6.1); + fM0.setDouble(1, 3, 8.1); - fM0.set(2, 2, 11.1); - fM0.set(2, 3, -12.1); + fM0.setDouble(2, 2, 11.1); + fM0.setDouble(2, 3, -12.1); } protected: virtual void performTest() { @@ -210,9 +210,9 @@ public: , fM0(SkMatrix44::kIdentity_Constructor) , fM1(SkMatrix44::kUninitialized_Constructor) { - fM0.set(0, 3, 4.1); - fM0.set(1, 3, 8.1); - fM0.set(2, 3, -12.1); + fM0.setDouble(0, 3, 4.1); + fM0.setDouble(1, 3, 8.1); + fM0.setDouble(2, 3, -12.1); } protected: virtual void performTest() { diff --git a/include/core/SkFloatingPoint.h b/include/core/SkFloatingPoint.h index 9fb343261b..432f53d22a 100644 --- a/include/core/SkFloatingPoint.h +++ b/include/core/SkFloatingPoint.h @@ -91,6 +91,8 @@ static inline float sk_float_copysign(float x, float y) { #define sk_float_log(x) logf(x) #endif +#define sk_float_round(x) sk_float_floor((x) + 0.5f) + // can't find log2f on android, but maybe that just a tool bug? #ifdef SK_BUILD_FOR_ANDROID static inline float sk_float_log2(float x) { diff --git a/src/utils/SkMatrix44.cpp b/src/utils/SkMatrix44.cpp index 731cb41377..c2c9ee4336 100644 --- a/src/utils/SkMatrix44.cpp +++ b/src/utils/SkMatrix44.cpp @@ -473,24 +473,24 @@ bool SkMatrix44::invert(SkMatrix44* inverse) const { double invYScale = 1 / fMat[1][1]; double invZScale = 1 / fMat[2][2]; - inverse->fMat[0][0] = invXScale; + inverse->fMat[0][0] = SkDoubleToMScalar(invXScale); inverse->fMat[0][1] = 0; inverse->fMat[0][2] = 0; inverse->fMat[0][3] = 0; inverse->fMat[1][0] = 0; - inverse->fMat[1][1] = invYScale; + inverse->fMat[1][1] = SkDoubleToMScalar(invYScale); inverse->fMat[1][2] = 0; inverse->fMat[1][3] = 0; inverse->fMat[2][0] = 0; inverse->fMat[2][1] = 0; - inverse->fMat[2][2] = invZScale; + inverse->fMat[2][2] = SkDoubleToMScalar(invZScale); inverse->fMat[2][3] = 0; - inverse->fMat[3][0] = -fMat[3][0] * invXScale; - inverse->fMat[3][1] = -fMat[3][1] * invYScale; - inverse->fMat[3][2] = -fMat[3][2] * invZScale; + inverse->fMat[3][0] = SkDoubleToMScalar(-fMat[3][0] * invXScale); + inverse->fMat[3][1] = SkDoubleToMScalar(-fMat[3][1] * invYScale); + inverse->fMat[3][2] = SkDoubleToMScalar(-fMat[3][2] * invZScale); inverse->fMat[3][3] = 1; inverse->setTypeMask(this->getType()); diff --git a/tests/Matrix44Test.cpp b/tests/Matrix44Test.cpp index 221c37d080..939675499c 100644 --- a/tests/Matrix44Test.cpp +++ b/tests/Matrix44Test.cpp @@ -200,8 +200,8 @@ static void test_map2(skiatest::Reporter* reporter, const SkMatrix44& mat) { SkMScalar dstA[4], dstB[4]; for (int i = 0; i < 4; ++i) { - dstA[i] = 123456789; - dstB[i] = 987654321; + dstA[i] = SkDoubleToMScalar(123456789); + dstB[i] = SkDoubleToMScalar(987654321); } mat.map2(src2, 1, dstA); @@ -532,29 +532,29 @@ static void test_3x3_conversion(skiatest::Reporter* reporter) { static void test_has_perspective(skiatest::Reporter* reporter) { SkMatrix44 transform(SkMatrix44::kIdentity_Constructor); - transform.set(3, 2, -0.1); + transform.setDouble(3, 2, -0.1); REPORTER_ASSERT(reporter, transform.hasPerspective()); transform.reset(); REPORTER_ASSERT(reporter, !transform.hasPerspective()); - transform.set(3, 0, -1.0); + transform.setDouble(3, 0, -1.0); REPORTER_ASSERT(reporter, transform.hasPerspective()); transform.reset(); - transform.set(3, 1, -1.0); + transform.setDouble(3, 1, -1.0); REPORTER_ASSERT(reporter, transform.hasPerspective()); transform.reset(); - transform.set(3, 2, -0.3); + transform.setDouble(3, 2, -0.3); REPORTER_ASSERT(reporter, transform.hasPerspective()); transform.reset(); - transform.set(3, 3, 0.5); + transform.setDouble(3, 3, 0.5); REPORTER_ASSERT(reporter, transform.hasPerspective()); - + transform.reset(); - transform.set(3, 3, 0.0); + transform.setDouble(3, 3, 0.0); REPORTER_ASSERT(reporter, transform.hasPerspective()); } @@ -757,13 +757,13 @@ static void test_preserves_2d_axis_alignment(skiatest::Reporter* reporter) { // Perspective cases. transform.setIdentity(); - transform.set(3, 2, -0.1); // Perspective depth 10 + transform.setDouble(3, 2, -0.1); // Perspective depth 10 transform2.setRotateDegreesAbout(0.0, 1.0, 0.0, 45.0); transform.preConcat(transform2); test(false, reporter, transform); transform.setIdentity(); - transform.set(3, 2, -0.1); // Perspective depth 10 + transform.setDouble(3, 2, -0.1); // Perspective depth 10 transform2.setRotateDegreesAbout(0.0, 0.0, 1.0, 90.0); transform.preConcat(transform2); test(true, reporter, transform); @@ -819,10 +819,11 @@ DEF_TEST(Matrix44, reporter) { // test tiny-valued matrix inverse mat.reset(); - mat.setScale(1.0e-12, 1.0e-12, 1.0e-12); + auto v = SkDoubleToMScalar(1.0e-12); + mat.setScale(v,v,v); rot.setRotateDegreesAbout(0, 0, -1, 90); mat.postConcat(rot); - mat.postTranslate(1.0e-12, 1.0e-12, 1.0e-12); + mat.postTranslate(v,v,v); REPORTER_ASSERT(reporter, mat.invert(NULL)); mat.invert(&inverse); iden1.setConcat(mat, inverse); @@ -830,10 +831,14 @@ DEF_TEST(Matrix44, reporter) { // test mixed-valued matrix inverse mat.reset(); - mat.setScale(1.0e-10, 3.0, 1.0e+10); + mat.setScale(SkDoubleToMScalar(1.0e-10), + SkDoubleToMScalar(3.0), + SkDoubleToMScalar(1.0e+10)); rot.setRotateDegreesAbout(0, 0, -1, 90); mat.postConcat(rot); - mat.postTranslate(1.0e+10, 3.0, 1.0e-10); + mat.postTranslate(SkDoubleToMScalar(1.0e+10), + SkDoubleToMScalar(3.0), + SkDoubleToMScalar(1.0e-10)); REPORTER_ASSERT(reporter, mat.invert(NULL)); mat.invert(&inverse); iden1.setConcat(mat, inverse);