diff options
author | Brian Paul <[email protected]> | 2009-04-03 10:16:31 -0600 |
---|---|---|
committer | Brian Paul <[email protected]> | 2009-04-03 10:16:31 -0600 |
commit | 39345a492837d733f158ad594555858a7b40e902 (patch) | |
tree | 0f943a14d07e6a46cbe3855b9c301b933989c84d | |
parent | 7be149cfd131c0b3f7d4337bb83e6fba5f563bf9 (diff) |
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)
-rw-r--r-- | 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 ce50224d30a..4372f7bb533 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); } |