more work to support N texture units
authorBrian Paul <brian.paul@tungstengraphics.com>
Mon, 2 Oct 2000 15:45:12 +0000 (15:45 +0000)
committerBrian Paul <brian.paul@tungstengraphics.com>
Mon, 2 Oct 2000 15:45:12 +0000 (15:45 +0000)
src/mesa/main/state.c

index f1cbf98..2afe84d 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: state.c,v 1.29 2000/09/28 22:44:30 brianp Exp $ */
+/* $Id: state.c,v 1.30 2000/10/02 15:45:12 brianp Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -721,9 +721,9 @@ static void update_rasterflags( GLcontext *ctx )
        && ctx->Color.DrawBuffer != GL_NONE)
       ctx->RasterMask |= ALPHABUF_BIT;
 
-   if (   ctx->Viewport.X<0
+   if (   ctx->Viewport.X < 0
        || ctx->Viewport.X + ctx->Viewport.Width > ctx->DrawBuffer->Width
-       || ctx->Viewport.Y<0
+       || ctx->Viewport.Y < 0
        || ctx->Viewport.Y + ctx->Viewport.Height > ctx->DrawBuffer->Height) {
       ctx->RasterMask |= WINCLIP_BIT;
    }
@@ -823,16 +823,24 @@ void gl_update_state( GLcontext *ctx )
 
    if (ctx->NewState & NEW_TEXTURE_ENV) {
       if (ctx->Texture.Unit[0].EnvMode == ctx->Texture.Unit[0].LastEnvMode &&
-         ctx->Texture.Unit[1].EnvMode == ctx->Texture.Unit[1].LastEnvMode)
+         ctx->Texture.Unit[1].EnvMode == ctx->Texture.Unit[1].LastEnvMode
+#if MAX_TEXTURE_UNITS > 2
+         && ctx->Texture.Unit[2].EnvMode == ctx->Texture.Unit[2].LastEnvMode)
+#endif
+         ) {
         ctx->NewState &= ~NEW_TEXTURE_ENV;
+      }
       ctx->Texture.Unit[0].LastEnvMode = ctx->Texture.Unit[0].EnvMode;
       ctx->Texture.Unit[1].LastEnvMode = ctx->Texture.Unit[1].EnvMode;
+#if MAX_TEXTURE_UNITS > 2
+      ctx->Texture.Unit[2].LastEnvMode = ctx->Texture.Unit[2].EnvMode;
+#endif
    }
 
    if (ctx->NewState & NEW_TEXTURE_MATRIX) {
-      ctx->Enabled &= ~(ENABLE_TEXMAT0|ENABLE_TEXMAT1);
+      ctx->Enabled &= ~(ENABLE_TEXMAT0 | ENABLE_TEXMAT1 | ENABLE_TEXMAT2);
 
-      for (i=0; i < MAX_TEXTURE_UNITS; i++) {
+      for (i=0; i < ctx->Const.MaxTextureUnits; i++) {
         if (ctx->TextureMatrix[i].flags & MAT_DIRTY_ALL_OVER) {
            gl_matrix_analyze( &ctx->TextureMatrix[i] );
            ctx->TextureMatrix[i].flags &= ~MAT_DIRTY_DEPENDENTS;
@@ -847,10 +855,10 @@ void gl_update_state( GLcontext *ctx )
    if (ctx->NewState & (NEW_TEXTURING | NEW_TEXTURE_ENABLE)) {
       ctx->Texture.NeedNormals = GL_FALSE;
       gl_update_dirty_texobjs(ctx);
-      ctx->Enabled &= ~(ENABLE_TEXGEN0 | ENABLE_TEXGEN1);
+      ctx->Enabled &= ~(ENABLE_TEXGEN0 | ENABLE_TEXGEN1 | ENABLE_TEXGEN2);
       ctx->Texture.ReallyEnabled = 0;
 
-      for (i=0; i < MAX_TEXTURE_UNITS; i++) {
+      for (i=0; i < ctx->Const.MaxTextureUnits; i++) {
         if (ctx->Texture.Unit[i].Enabled) {
            gl_update_texture_unit( ctx, &ctx->Texture.Unit[i] );
 
@@ -1041,7 +1049,7 @@ void gl_update_state( GLcontext *ctx )
     * can, find the current positions of the lights in object space
     */
    if ((ctx->Enabled & (ENABLE_POINT_ATTEN | ENABLE_LIGHT | ENABLE_FOG |
-                       ENABLE_TEXGEN0 | ENABLE_TEXGEN1)) &&
+                       ENABLE_TEXGEN0 | ENABLE_TEXGEN1 | ENABLE_TEXGEN2)) &&
        (ctx->NewState & (NEW_LIGHTING | 
                          NEW_FOG |
                         NEW_MODELVIEW |