fix GL_REFLECTION_MAP texgen by not using tex matrix negation when lighting is not...
authorRoland Scheidegger <rscheidegger@gmx.ch>
Wed, 13 Sep 2006 17:35:44 +0000 (17:35 +0000)
committerRoland Scheidegger <rscheidegger@gmx.ch>
Wed, 13 Sep 2006 17:35:44 +0000 (17:35 +0000)
src/mesa/drivers/dri/r200/r200_state.c
src/mesa/drivers/dri/r200/r200_texstate.c

index 452d354f6e93e3576a78a3852f2e47341be07fb2..658ce634e8d7eba87136bb787082af5f509680d5 100644 (file)
@@ -1970,6 +1970,8 @@ static void r200Enable( GLcontext *ctx, GLenum cap, GLboolean state )
 
    case GL_LIGHTING:
       r200UpdateSpecular(ctx);
+      /* for reflection map fixup - might set recheck_texgen for all units too */
+      rmesa->NewGLState |= _NEW_TEXTURE;
       break;
 
    case GL_LINE_SMOOTH:
index acc980ca8c1450b5536ab808a449b89a1606cc90..9c8997a8c77e742cda7095fb09cfa2d534ecded1 100644 (file)
@@ -1304,11 +1304,13 @@ static GLboolean r200_validate_texgen( GLcontext *ctx, GLuint unit )
    case GL_REFLECTION_MAP_NV:
       rmesa->TexGenNeedNormals[unit] = GL_TRUE;
       tgi |= R200_TEXGEN_INPUT_EYE_REFLECT<<inputshift;
-      set_texgen_matrix( rmesa, unit, 
-        (texUnit->TexGenEnabled & S_BIT) ? reflect : I,
-        (texUnit->TexGenEnabled & T_BIT) ? reflect + 4 : I + 4,
-        (texUnit->TexGenEnabled & R_BIT) ? reflect + 8 : I + 8,
-        I + 12);
+      /* pretty weird, must only negate when lighting is enabled? */
+      if (ctx->Light.Enabled)
+        set_texgen_matrix( rmesa, unit, 
+           (texUnit->TexGenEnabled & S_BIT) ? reflect : I,
+           (texUnit->TexGenEnabled & T_BIT) ? reflect + 4 : I + 4,
+           (texUnit->TexGenEnabled & R_BIT) ? reflect + 8 : I + 8,
+           I + 12);
       break;
 
    case GL_NORMAL_MAP_NV: