mesa: loosen small matrix determinant check
authorBrian Paul <brianp@vmware.com>
Tue, 24 Jul 2012 17:11:45 +0000 (11:11 -0600)
committerBrian Paul <brianp@vmware.com>
Thu, 26 Jul 2012 19:59:43 +0000 (13:59 -0600)
When computing a matrix inverse, if the determinant is too small we could hit
a divide by zero.  There's a check to prevent this (we basically give up on
computing the inverse and return the identity matrix.)  This patch loosens
this test to fix a lighting bug reported by Lars Henning Wendt.

v2: use abs(det) to handle negative values

NOTE: This is a candidate for the 8.0 branch.

Tested-by: Lars Henning Wendt <lars.henning.wendt@gris.tu-darmstadt.de>
src/mesa/math/m_matrix.c

index 02aedbad85673550a9de86489acb5c5346acb6cd..ffbdcdb4c96e56c62c853fb84bc455405ce073e1 100644 (file)
@@ -513,7 +513,7 @@ static GLboolean invert_matrix_3d_general( GLmatrix *mat )
 
    det = pos + neg;
 
-   if (det*det < 1e-25)
+   if (FABSF(det) < 1e-25)
       return GL_FALSE;
 
    det = 1.0F / det;