Use temporary matrix in __gluInvertMatrixd() to fix aliasing problem (see bugs 12269...
authorBrian <brian.paul@tungstengraphics.com>
Mon, 3 Sep 2007 22:20:05 +0000 (16:20 -0600)
committerBrian <brian.paul@tungstengraphics.com>
Mon, 3 Sep 2007 22:22:14 +0000 (16:22 -0600)
src/glu/sgi/libutil/project.c

index d22989c38552cf8db4d977f48a377998dc5347aa..356b46b8992a6ae32aa7ab683dc47205b43e61b8 100644 (file)
@@ -171,9 +171,9 @@ static void __gluMultMatrixVecd(const GLdouble matrix[16], const GLdouble in[4],
 ** Invert 4x4 matrix.
 ** Contributed by David Moore (See Mesa bug #6748)
 */
-static int __gluInvertMatrixd(const GLdouble m[16], GLdouble inv[16])
+static int __gluInvertMatrixd(const GLdouble m[16], GLdouble invOut[16])
 {
-    double det;
+    double inv[16], det;
     int i;
 
     inv[0] =   m[5]*m[10]*m[15] - m[5]*m[11]*m[14] - m[9]*m[6]*m[15]
@@ -216,7 +216,7 @@ static int __gluInvertMatrixd(const GLdouble m[16], GLdouble inv[16])
     det = 1.0 / det;
 
     for (i = 0; i < 16; i++)
-        inv[i] *= det;
+        invOut[i] = inv[i] * det;
 
     return GL_TRUE;
 }