Mesa (gallium-mesa-7.4): mesa: don' t normalize spot light direction until validation time

Alan Hourihane alanh at kemper.freedesktop.org
Tue Apr 7 14:41:13 UTC 2009


Module: Mesa
Branch: gallium-mesa-7.4
Commit: 39345a492837d733f158ad594555858a7b40e902
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=39345a492837d733f158ad594555858a7b40e902

Author: Brian Paul <brianp at vmware.com>
Date:   Fri Apr  3 10:16:31 2009 -0600

mesa: don't normalize spot light direction until validation time

In glLight() we're only supposed to transform the direction by the modelview
matrix, not normalized it too.

(cherry picked from commit 650d147289014e8a98f65fbbcd1855b2a4f19d2f)

---

 src/mesa/main/light.c |    9 +++++++--
 1 files changed, 7 insertions(+), 2 deletions(-)

diff --git a/src/mesa/main/light.c b/src/mesa/main/light.c
index ce50224..4372f7b 100644
--- a/src/mesa/main/light.c
+++ b/src/mesa/main/light.c
@@ -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);
 	 }
 




More information about the mesa-commit mailing list