minor simplification
[mesa.git] / src / mesa / swrast / s_texcombine.c
index 0f662c3d2bee4ed1daa42901d3bfcc05c22ed3ff..ac26c9cebb21d1327a298e3b2141754c92633d44 100644 (file)
@@ -1,8 +1,8 @@
 /*
  * Mesa 3-D graphics library
- * Version:  6.5
+ * Version:  6.5.1
  *
- * Copyright (C) 1999-2005  Brian Paul   All Rights Reserved.
+ * Copyright (C) 1999-2006  Brian Paul   All Rights Reserved.
  *
  * Permission is hereby granted, free of charge, to any person obtaining a
  * copy of this software and associated documentation files (the "Software"),
 
 #define PROD(A,B)   ( (GLuint)(A) * ((GLuint)(B)+1) )
 #define S_PROD(A,B) ( (GLint)(A) * ((GLint)(B)+1) )
+#if CHAN_BITS == 32
+typedef GLfloat ChanTemp;
+#else
+typedef GLuint ChanTemp;
+#endif
 
 
 /**
@@ -67,13 +72,11 @@ texture_combine( const GLcontext *ctx, GLuint unit, GLuint n,
 #if CHAN_TYPE == GL_FLOAT
    const GLchan RGBmult = (GLfloat) (1 << RGBshift);
    const GLchan Amult = (GLfloat) (1 << Ashift);
-   static const GLchan one[4] = { 1.0, 1.0, 1.0, 1.0 };
-   static const GLchan zero[4] = { 0.0, 0.0, 0.0, 0.0 };
 #else
    const GLint half = (CHAN_MAX + 1) / 2;
+#endif
    static const GLchan one[4] = { CHAN_MAX, CHAN_MAX, CHAN_MAX, CHAN_MAX };
    static const GLchan zero[4] = { 0, 0, 0, 0 };
-#endif
    const GLuint numColorArgs = textureUnit->_CurrentCombine->_NumArgsRGB;
    const GLuint numAlphaArgs = textureUnit->_CurrentCombine->_NumArgsA;
    GLchan ccolor[3][MAX_WIDTH][4];
@@ -99,7 +102,6 @@ texture_combine( const GLcontext *ctx, GLuint unit, GLuint n,
    for (j = 0; j < numColorArgs; j++) {
       const GLenum srcRGB = textureUnit->_CurrentCombine->SourceRGB[j];
 
-
       switch (srcRGB) {
          case GL_TEXTURE:
             argRGB[j] = (const GLchan (*)[4])
@@ -733,7 +735,7 @@ texture_apply( const GLcontext *ctx,
 {
    GLint baseLevel;
    GLuint i;
-   GLint Rc, Gc, Bc, Ac;
+   GLchan Rc, Gc, Bc, Ac;
    GLenum format;
    (void) primary_rgba;
 
@@ -743,7 +745,7 @@ texture_apply( const GLcontext *ctx,
    baseLevel = texUnit->_Current->BaseLevel;
    ASSERT(texUnit->_Current->Image[0][baseLevel]);
 
-   format = texUnit->_Current->Image[0][baseLevel]->Format;
+   format = texUnit->_Current->Image[0][baseLevel]->_BaseFormat;
 
    if (format == GL_COLOR_INDEX || format == GL_YCBCR_MESA) {
       format = GL_RGBA;  /* a bit of a hack */
@@ -899,7 +901,7 @@ texture_apply( const GLcontext *ctx,
            case GL_RGBA:
               for (i=0;i<n;i++) {
                  /* Cv = Cf(1-At) + CtAt */
-                 GLint t = texel[i][ACOMP], s = CHAN_MAX - t;
+                 GLchan t = texel[i][ACOMP], s = CHAN_MAX - t;
                  rgba[i][RCOMP] = CHAN_PRODUCT(rgba[i][RCOMP], s) + CHAN_PRODUCT(texel[i][RCOMP],t);
                  rgba[i][GCOMP] = CHAN_PRODUCT(rgba[i][GCOMP], s) + CHAN_PRODUCT(texel[i][GCOMP],t);
                  rgba[i][BCOMP] = CHAN_PRODUCT(rgba[i][BCOMP], s) + CHAN_PRODUCT(texel[i][BCOMP],t);
@@ -913,10 +915,10 @@ texture_apply( const GLcontext *ctx,
         break;
 
       case GL_BLEND:
-         Rc = (GLint) (texUnit->EnvColor[0] * CHAN_MAXF);
-         Gc = (GLint) (texUnit->EnvColor[1] * CHAN_MAXF);
-         Bc = (GLint) (texUnit->EnvColor[2] * CHAN_MAXF);
-         Ac = (GLint) (texUnit->EnvColor[3] * CHAN_MAXF);
+         UNCLAMPED_FLOAT_TO_CHAN(Rc, texUnit->EnvColor[0]);
+         UNCLAMPED_FLOAT_TO_CHAN(Gc, texUnit->EnvColor[1]);
+         UNCLAMPED_FLOAT_TO_CHAN(Bc, texUnit->EnvColor[2]);
+         UNCLAMPED_FLOAT_TO_CHAN(Ac, texUnit->EnvColor[3]);
         switch (format) {
            case GL_ALPHA:
               for (i=0;i<n;i++) {
@@ -996,10 +998,10 @@ texture_apply( const GLcontext *ctx,
                break;
             case GL_LUMINANCE:
                for (i=0;i<n;i++) {
-                  GLuint Lt = texel[i][RCOMP];
-                  GLuint r = rgba[i][RCOMP] + Lt;
-                  GLuint g = rgba[i][GCOMP] + Lt;
-                  GLuint b = rgba[i][BCOMP] + Lt;
+                  ChanTemp Lt = texel[i][RCOMP];
+                  ChanTemp r = rgba[i][RCOMP] + Lt;
+                  ChanTemp g = rgba[i][GCOMP] + Lt;
+                  ChanTemp b = rgba[i][BCOMP] + Lt;
                   rgba[i][RCOMP] = MIN2(r, CHAN_MAX);
                   rgba[i][GCOMP] = MIN2(g, CHAN_MAX);
                   rgba[i][BCOMP] = MIN2(b, CHAN_MAX);
@@ -1008,10 +1010,10 @@ texture_apply( const GLcontext *ctx,
                break;
             case GL_LUMINANCE_ALPHA:
                for (i=0;i<n;i++) {
-                  GLuint Lt = texel[i][RCOMP];
-                  GLuint r = rgba[i][RCOMP] + Lt;
-                  GLuint g = rgba[i][GCOMP] + Lt;
-                  GLuint b = rgba[i][BCOMP] + Lt;
+                  ChanTemp Lt = texel[i][RCOMP];
+                  ChanTemp r = rgba[i][RCOMP] + Lt;
+                  ChanTemp g = rgba[i][GCOMP] + Lt;
+                  ChanTemp b = rgba[i][BCOMP] + Lt;
                   rgba[i][RCOMP] = MIN2(r, CHAN_MAX);
                   rgba[i][GCOMP] = MIN2(g, CHAN_MAX);
                   rgba[i][BCOMP] = MIN2(b, CHAN_MAX);
@@ -1021,10 +1023,10 @@ texture_apply( const GLcontext *ctx,
             case GL_INTENSITY:
                for (i=0;i<n;i++) {
                   GLchan It = texel[i][RCOMP];
-                  GLuint r = rgba[i][RCOMP] + It;
-                  GLuint g = rgba[i][GCOMP] + It;
-                  GLuint b = rgba[i][BCOMP] + It;
-                  GLuint a = rgba[i][ACOMP] + It;
+                  ChanTemp r = rgba[i][RCOMP] + It;
+                  ChanTemp g = rgba[i][GCOMP] + It;
+                  ChanTemp b = rgba[i][BCOMP] + It;
+                  ChanTemp a = rgba[i][ACOMP] + It;
                   rgba[i][RCOMP] = MIN2(r, CHAN_MAX);
                   rgba[i][GCOMP] = MIN2(g, CHAN_MAX);
                   rgba[i][BCOMP] = MIN2(b, CHAN_MAX);
@@ -1033,9 +1035,9 @@ texture_apply( const GLcontext *ctx,
                break;
            case GL_RGB:
               for (i=0;i<n;i++) {
-                  GLuint r = rgba[i][RCOMP] + texel[i][RCOMP];
-                  GLuint g = rgba[i][GCOMP] + texel[i][GCOMP];
-                  GLuint b = rgba[i][BCOMP] + texel[i][BCOMP];
+                  ChanTemp r = rgba[i][RCOMP] + texel[i][RCOMP];
+                  ChanTemp g = rgba[i][GCOMP] + texel[i][GCOMP];
+                  ChanTemp b = rgba[i][BCOMP] + texel[i][BCOMP];
                  rgba[i][RCOMP] = MIN2(r, CHAN_MAX);
                  rgba[i][GCOMP] = MIN2(g, CHAN_MAX);
                  rgba[i][BCOMP] = MIN2(b, CHAN_MAX);
@@ -1044,9 +1046,9 @@ texture_apply( const GLcontext *ctx,
               break;
            case GL_RGBA:
               for (i=0;i<n;i++) {
-                  GLuint r = rgba[i][RCOMP] + texel[i][RCOMP];
-                  GLuint g = rgba[i][GCOMP] + texel[i][GCOMP];
-                  GLuint b = rgba[i][BCOMP] + texel[i][BCOMP];
+                  ChanTemp r = rgba[i][RCOMP] + texel[i][RCOMP];
+                  ChanTemp g = rgba[i][GCOMP] + texel[i][GCOMP];
+                  ChanTemp b = rgba[i][BCOMP] + texel[i][BCOMP];
                  rgba[i][RCOMP] = MIN2(r, CHAN_MAX);
                  rgba[i][GCOMP] = MIN2(g, CHAN_MAX);
                  rgba[i][BCOMP] = MIN2(b, CHAN_MAX);