mesa: fix incorrect transformation of GL_SPOT_DIRECTION
authorBrian Paul <brianp@vmware.com>
Wed, 14 Jan 2009 18:50:32 +0000 (11:50 -0700)
committerBrian Paul <brianp@vmware.com>
Wed, 14 Jan 2009 18:51:30 +0000 (11:51 -0700)
This was changed between GL 1.0 and 1.1.  Mesa still had the 1.0 behaviour.

docs/relnotes-7.3.html
src/mesa/main/light.c
src/mesa/math/m_matrix.h

index 69f335f2d8b7c123bc37af1b740c977f225dd4e7..d46a5098842835f96d1539d8d63f469a37d65d71 100644 (file)
@@ -46,6 +46,7 @@ tbd
 <li>Fix for wglCreateLayerContext() in WGL/Windows driver
 <li>Build fixes for OpenBSD and gcc 2.95
 <li>GLSL preprocessor handles #pragma now
+<li>Fix incorrect transformation of GL_SPOT_DIRECTION
 </ul>
 
 <h2>Changes</h2>
index 10ee088a2da74d6363585c0b2a12015d0e3ebb26..ce50224d30afae1112a701947e00f4ad27d5a58d 100644 (file)
@@ -208,7 +208,8 @@ _mesa_Lightfv( GLenum light, GLenum pname, const GLfloat *params )
       if (_math_matrix_is_dirty(ctx->ModelviewMatrixStack.Top)) {
         _math_matrix_analyse(ctx->ModelviewMatrixStack.Top);
       }
-      TRANSFORM_NORMAL(temp, params, ctx->ModelviewMatrixStack.Top->inv);
+      TRANSFORM_DIRECTION(temp, params, ctx->ModelviewMatrixStack.Top->m);
+      NORMALIZE_3FV(temp);
       params = temp;
       break;
    case GL_SPOT_EXPONENT:
index e8303f3ac5cd2bc59414a26d4333022c1d8e38eb..a8d9000e89be05b93918b21111dbef001f69c0df 100644 (file)
@@ -189,6 +189,18 @@ do {                                                               \
 } while (0)
 
 
+/**
+ * Transform a direction by a matrix.
+ */
+#define TRANSFORM_DIRECTION( TO, DIR, MAT )                    \
+do {                                                           \
+   TO[0] = DIR[0] * MAT[0] + DIR[1] * MAT[4] + DIR[2] * MAT[8];        \
+   TO[1] = DIR[0] * MAT[1] + DIR[1] * MAT[5] + DIR[2] * MAT[9];        \
+   TO[2] = DIR[0] * MAT[2] + DIR[1] * MAT[6] + DIR[2] * MAT[10];\
+} while (0)
+
+
+
 /*@}*/