diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/mesa/drivers/glide/fxsetup.c | 57 | 
1 files changed, 57 insertions, 0 deletions
diff --git a/src/mesa/drivers/glide/fxsetup.c b/src/mesa/drivers/glide/fxsetup.c index 9996499316..ce70b472d5 100644 --- a/src/mesa/drivers/glide/fxsetup.c +++ b/src/mesa/drivers/glide/fxsetup.c @@ -167,6 +167,9 @@ GLuint fxGetTexSetConfiguration(GLcontext *ctx,      case GL_BLEND:        envmode|=FX_UM_E0_BLEND;        break; +    case GL_ADD: +      envmode|=FX_UM_E0_ADD; +      break;      default:        /* do nothing */        break; @@ -213,6 +216,9 @@ GLuint fxGetTexSetConfiguration(GLcontext *ctx,      case GL_BLEND:        envmode|=FX_UM_E1_BLEND;        break; +    case GL_ADD: +      envmode|=FX_UM_E1_ADD; +      break;      default:        /* do nothing */        break; @@ -786,6 +792,57 @@ static void fxSetupTextureDoubleTMU(GLcontext *ctx)  		   GR_COMBINE_OTHER_TEXTURE,  		   FXFALSE);      break; +   + +  case (FX_UM_E0_MODULATE | FX_UM_E1_ADD): /* Quake 3 Sky */ +    { +      GLboolean isalpha[FX_NUM_TMU]; + +      if(ti0->baseLevelInternalFormat==GL_ALPHA) +	isalpha[ti0->tmi.whichTMU]=GL_TRUE; +      else +	isalpha[ti0->tmi.whichTMU]=GL_FALSE; + +      if(ti1->baseLevelInternalFormat==GL_ALPHA) +	isalpha[ti1->tmi.whichTMU]=GL_TRUE; +      else +	isalpha[ti1->tmi.whichTMU]=GL_FALSE; +	 +      if(isalpha[FX_TMU1]) +	grTexCombine(GR_TMU1, +		     GR_COMBINE_FUNCTION_ZERO,GR_COMBINE_FACTOR_NONE, +		     GR_COMBINE_FUNCTION_LOCAL,GR_COMBINE_FACTOR_NONE, +		     FXTRUE,FXFALSE); +      else +	grTexCombine(GR_TMU1, +		     GR_COMBINE_FUNCTION_LOCAL,GR_COMBINE_FACTOR_NONE, +		     GR_COMBINE_FUNCTION_LOCAL,GR_COMBINE_FACTOR_NONE, +		     FXFALSE,FXFALSE); + +      if(isalpha[FX_TMU0]) +	grTexCombine(GR_TMU0, +		     GR_COMBINE_FUNCTION_SCALE_OTHER,GR_COMBINE_FACTOR_ONE, +		     GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,GR_COMBINE_FACTOR_ONE, +		     FXFALSE,FXFALSE); +      else +	grTexCombine(GR_TMU0, +		     GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,GR_COMBINE_FACTOR_ONE, +		     GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL,GR_COMBINE_FACTOR_ONE, +		     FXFALSE,FXFALSE); + +      grColorCombine(GR_COMBINE_FUNCTION_SCALE_OTHER, +		     GR_COMBINE_FACTOR_LOCAL, +		     localc, +		     GR_COMBINE_OTHER_TEXTURE, +		     FXFALSE); + +      grAlphaCombine(GR_COMBINE_FUNCTION_SCALE_OTHER, +		     GR_COMBINE_FACTOR_LOCAL, +		     locala,		     GR_COMBINE_OTHER_TEXTURE, +		     FXFALSE); +      break; +    } +        }    if (MESA_VERBOSE&VERBOSE_DRIVER) {  | 
