From: Brian Paul Date: Mon, 2 Oct 2000 15:45:12 +0000 (+0000) Subject: more work to support N texture units X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=16eb23a0cb0edfede3968c0e938f533b9abe885c;p=mesa.git more work to support N texture units --- diff --git a/src/mesa/main/state.c b/src/mesa/main/state.c index f1cbf9814c4..2afe84d0e2b 100644 --- a/src/mesa/main/state.c +++ b/src/mesa/main/state.c @@ -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 |