mesa: don't normalize spot light direction until validation time
authorBrian Paul <brianp@vmware.com>
Fri, 3 Apr 2009 15:55:10 +0000 (09:55 -0600)
committerBrian Paul <brianp@vmware.com>
Fri, 3 Apr 2009 16:09:27 +0000 (10:09 -0600)
In glLight() we're only supposed to transform the direction by the modelview
matrix, not normalized it too.

src/mesa/main/light.c

index a15c1f0be0513e89d50964f0844c1ca52466cf5d..f72841b8ccb49be14b75b601ec88c5bbe959e10a 100644 (file)
@@ -209,7 +209,6 @@ _mesa_Lightfv( GLenum light, GLenum pname, const GLfloat *params )
         _math_matrix_analyse(ctx->ModelviewMatrixStack.Top);
       }
       TRANSFORM_DIRECTION(temp, params, ctx->ModelviewMatrixStack.Top->m);
-      NORMALIZE_3FV(temp);
       params = temp;
       break;
    case GL_SPOT_EXPONENT:
@@ -1137,12 +1136,18 @@ compute_light_positions( GLcontext *ctx )
       }
 
       if (light->_Flags & LIGHT_SPOT) {
+         /* Note: we normalize the spot direction now */
+
         if (ctx->_NeedEyeCoords) {
            COPY_3V( light->_NormDirection, light->EyeDirection );
+            NORMALIZE_3FV( light->_NormDirection );
         }
          else {
+            GLfloat spotDir[3];
+            COPY_3V(spotDir, light->EyeDirection);
+            NORMALIZE_3FV(spotDir);
            TRANSFORM_NORMAL( light->_NormDirection,
-                             light->EyeDirection,
+                             spotDir,
                              ctx->ModelviewMatrixStack.Top->m);
         }