diff options
author | Brian Paul <[email protected]> | 2009-01-14 11:50:32 -0700 |
---|---|---|
committer | Brian Paul <[email protected]> | 2009-01-14 11:51:30 -0700 |
commit | c12d24b513a67648c30bf892964f887fad71e103 (patch) | |
tree | 38ddc080cbafca4de540f912982f836e8233ce5c /src/mesa | |
parent | 2549c26a8b1eec21bdd8f45d3b3dd06e17ac82ae (diff) |
mesa: fix incorrect transformation of GL_SPOT_DIRECTION
This was changed between GL 1.0 and 1.1. Mesa still had the 1.0 behaviour.
Diffstat (limited to 'src/mesa')
-rw-r--r-- | src/mesa/main/light.c | 3 | ||||
-rw-r--r-- | src/mesa/math/m_matrix.h | 12 |
2 files changed, 14 insertions, 1 deletions
diff --git a/src/mesa/main/light.c b/src/mesa/main/light.c index 10ee088a2da..ce50224d30a 100644 --- a/src/mesa/main/light.c +++ b/src/mesa/main/light.c @@ -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: diff --git a/src/mesa/math/m_matrix.h b/src/mesa/math/m_matrix.h index e8303f3ac5c..a8d9000e89b 100644 --- a/src/mesa/math/m_matrix.h +++ b/src/mesa/math/m_matrix.h @@ -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) + + + /*@}*/ |