diff options
author | 2013-08-15 23:53:11 +0000 | |
---|---|---|
committer | 2013-08-15 23:53:11 +0000 | |
commit | 4271f79289d6d5d510ee2249d34eba194963f539 (patch) | |
tree | 62d79c4019cc01c39003fc6954d3f6fddd9a054a | |
parent | 968863f81873091b4c0fd435eea9c4e16d9606fe (diff) |
Revert "Make SkMatrix44::invert() check for finite 1/det instead of magic value"
This reverts commit f109b4ac6ef21ccb8b76891e50e63dae820af116.
git-svn-id: http://skia.googlecode.com/svn/trunk@10760 2bbb7eff-a529-9590-31e7-b0007b416f81
-rw-r--r-- | src/utils/SkMatrix44.cpp | 8 | ||||
-rw-r--r-- | tests/Matrix44Test.cpp | 27 |
2 files changed, 3 insertions, 32 deletions
diff --git a/src/utils/SkMatrix44.cpp b/src/utils/SkMatrix44.cpp index 9ceecbdf2a..92c8715faa 100644 --- a/src/utils/SkMatrix44.cpp +++ b/src/utils/SkMatrix44.cpp @@ -529,16 +529,13 @@ bool SkMatrix44::invert(SkMatrix44* inverse) const { // Calculate the determinant double det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06; - double invdet = 1.0 / det; - // If det is zero, we want to return false. However, we also want to return false - // if 1/det overflows to infinity (i.e. det is denormalized). Both of these are - // handled by checking that 1/det is finite. - if (!sk_float_isfinite(invdet)) { + if (dabs(det) < TOO_SMALL_FOR_DETERMINANT) { return false; } if (NULL == inverse) { return true; } + double invdet = 1.0 / det; b00 *= invdet; b01 *= invdet; @@ -571,6 +568,7 @@ bool SkMatrix44::invert(SkMatrix44* inverse) const { inverse->fMat[3][3] = SkDoubleToMScalar(a20 * b03 - a21 * b01 + a22 * b00); inverse->dirtyTypeMask(); + inverse->dirtyTypeMask(); return true; } diff --git a/tests/Matrix44Test.cpp b/tests/Matrix44Test.cpp index 6783ba0275..b2c7071b79 100644 --- a/tests/Matrix44Test.cpp +++ b/tests/Matrix44Test.cpp @@ -403,33 +403,6 @@ static void TestMatrix44(skiatest::Reporter* reporter) { iden2.setConcat(inverse, mat); REPORTER_ASSERT(reporter, is_identity(iden2)); - // test tiny-valued matrix inverse - mat.reset(); - mat.setScale(1.0e-12, 1.0e-12, 1.0e-12); - rot.setRotateDegreesAbout(0, 0, -1, 90); - mat.postConcat(rot); - mat.postTranslate(1.0e-12, 1.0e-12, 1.0e-12); - REPORTER_ASSERT(reporter, mat.invert(NULL)); - mat.invert(&inverse); - iden1.setConcat(mat, inverse); - REPORTER_ASSERT(reporter, is_identity(iden1)); - - // test mixed-valued matrix inverse - mat.reset(); - mat.setScale(1.0e-12, 3.0, 1.0e+12); - rot.setRotateDegreesAbout(0, 0, -1, 90); - mat.postConcat(rot); - mat.postTranslate(1.0e+12, 3.0, 1.0e-12); - REPORTER_ASSERT(reporter, mat.invert(NULL)); - mat.invert(&inverse); - iden1.setConcat(mat, inverse); - REPORTER_ASSERT(reporter, is_identity(iden1)); - - // test degenerate matrix - mat.reset(); - mat.set3x3(1.0, 1.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0, 0.0); - REPORTER_ASSERT(reporter, !mat.invert(NULL)); - // test rol/col Major getters { mat.setTranslate(2, 3, 4); |