New colormac.h file for color-related macros.
Lot's of clean-up in macros.h and mmath.h
diff --git a/src/mesa/main/clip.c b/src/mesa/main/clip.c
index 1e98358..92788c6 100644
--- a/src/mesa/main/clip.c
+++ b/src/mesa/main/clip.c
@@ -1,4 +1,4 @@
-/* $Id: clip.c,v 1.10 2000/10/27 16:44:40 keithw Exp $ */
+/* $Id: clip.c,v 1.11 2000/10/28 20:41:13 brianp Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -30,6 +30,7 @@
 #else
 #include "glheader.h"
 #include "clip.h"
+#include "colormac.h"
 #include "context.h"
 #include "macros.h"
 #include "matrix.h"
diff --git a/src/mesa/main/colormac.h b/src/mesa/main/colormac.h
new file mode 100644
index 0000000..5d125e2
--- /dev/null
+++ b/src/mesa/main/colormac.h
@@ -0,0 +1,187 @@
+/* $Id: colormac.h,v 1.1 2000/10/28 20:41:13 brianp Exp $ */
+
+/*
+ * Mesa 3-D graphics library
+ * Version:  3.5
+ *
+ * Copyright (C) 1999-2000  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"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+ * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+
+
+/*
+ * Color-related macros
+ */
+
+#ifndef COLORMAC_H
+#define COLORMAC_H
+
+
+#include "glheader.h"
+#include "config.h"
+#include "macros.h"
+#include "mmath.h"
+
+
+
+/*
+ * Integer / float conversion for colors, normals, etc.
+ */
+
+#define BYTE_TO_UBYTE(b)   (b < 0 ? 0 : (GLubyte) b)
+#define SHORT_TO_UBYTE(s)  (s < 0 ? 0 : (GLubyte) (s >> 7))
+#define USHORT_TO_UBYTE(s)              (GLubyte) (s >> 8)
+#define INT_TO_UBYTE(i)    (i < 0 ? 0 : (GLubyte) (i >> 23))
+#define UINT_TO_UBYTE(i)                (GLubyte) (i >> 24)
+
+/* Convert GLfloat in [0.0,1.0] to GLubyte in [0,255] */
+#define FLOAT_TO_UBYTE(X)	((GLubyte) (GLint) (((X)) * 255.0F))
+
+
+/* Convert GLbyte in [-128,127] to GLfloat in [-1.0,1.0] */
+#define BYTE_TO_FLOAT(B)	((2.0F * (B) + 1.0F) * (1.0F/255.0F))
+
+/* Convert GLfloat in [-1.0,1.0] to GLbyte in [-128,127] */
+#define FLOAT_TO_BYTE(X)	( (((GLint) (255.0F * (X))) - 1) / 2 )
+
+
+/* Convert GLushort in [0,65536] to GLfloat in [0.0,1.0] */
+#define USHORT_TO_FLOAT(S)	((GLfloat) (S) * (1.0F / 65535.0F))
+
+/* Convert GLfloat in [0.0,1.0] to GLushort in [0,65536] */
+#define FLOAT_TO_USHORT(X)	((GLushort) (GLint) ((X) * 65535.0F))
+
+
+/* Convert GLshort in [-32768,32767] to GLfloat in [-1.0,1.0] */
+#define SHORT_TO_FLOAT(S)	((2.0F * (S) + 1.0F) * (1.0F/65535.0F))
+
+/* Convert GLfloat in [0.0,1.0] to GLshort in [-32768,32767] */
+#define FLOAT_TO_SHORT(X)	( (((GLint) (65535.0F * (X))) - 1) / 2 )
+
+
+/* Convert GLuint in [0,4294967295] to GLfloat in [0.0,1.0] */
+#define UINT_TO_FLOAT(U)	((GLfloat) (U) * (1.0F / 4294967295.0F))
+
+/* Convert GLfloat in [0.0,1.0] to GLuint in [0,4294967295] */
+#define FLOAT_TO_UINT(X)	((GLuint) ((X) * 4294967295.0))
+
+
+/* Convert GLint in [-2147483648,2147483647] to GLfloat in [-1.0,1.0] */
+#define INT_TO_FLOAT(I)		((2.0F * (I) + 1.0F) * (1.0F/4294967294.0F))
+
+/* Convert GLfloat in [-1.0,1.0] to GLint in [-2147483648,2147483647] */
+/* causes overflow:
+#define FLOAT_TO_INT(X)		( (((GLint) (4294967294.0F * (X))) - 1) / 2 )
+*/
+/* a close approximation: */
+#define FLOAT_TO_INT(X)		( (GLint) (2147483647.0 * (X)) )
+
+
+
+#if CHAN_BITS == 8
+
+#define BYTE_TO_CHAN(b)   ((b) < 0 ? 0 : (GLchan) (b))
+#define UBYTE_TO_CHAN(b)  (b)
+#define SHORT_TO_CHAN(s)  ((s) < 0 ? 0 : (GLchan) ((s) >> 7))
+#define USHORT_TO_CHAN(s) ((GLchan) ((s) >> 8))
+#define INT_TO_CHAN(i)    ((i) < 0 ? 0 : (GLchan) ((i) >> 23))
+#define UINT_TO_CHAN(i)   ((GLchan) ((i) >> 24))
+
+#define CHAN_TO_FLOAT(c)  UBYTE_TO_FLOAT(c)
+
+#define FLOAT_COLOR_TO_CHAN(c, f) FLOAT_COLOR_TO_UBYTE_COLOR(c, f)
+
+#define COPY_CHAN4(DST, SRC)  COPY_4UBV(DST, SRC)
+
+#define CHAN_PRODUCT(a, b)  ( (GLubyte) (((GLint)(a) * ((GLint)(b) + 1)) >> 8) )
+
+#elif CHAN_BITS == 16
+
+#define BYTE_TO_CHAN(b)   ((b) < 0 ? 0 : (GLchan) ((b) * 516))
+#define UBYTE_TO_CHAN(b)  ((GLchan) (((b) << 8) | (b)))
+#define SHORT_TO_CHAN(s)  ((s) < 0 ? 0 : (GLchan) (s))
+#define USHORT_TO_CHAN(s) (s)
+#define INT_TO_CHAN(i)    ((i) < 0 ? 0 : (GLchan) ((i) >> 15))
+#define UINT_TO_CHAN(i)   ((GLchan) ((i) >> 16))
+
+#define CHAN_TO_FLOAT(c)  ((GLfloat) ((c) * (1.0 / CHAN_MAXF)))
+
+#define FLOAT_COLOR_TO_CHAN(c, f) \
+	c = ((GLchan) FloatToInt(CLAMP(f, 0.0F, 1.0F) * CHAN_MAXF + 0.5F))
+
+#define COPY_CHAN4(DST, SRC)  COPY_4V(DST, SRC)
+
+#define CHAN_PRODUCT(a, b)  ( (GLchan) ((((GLint) (a)) * ((GLint) (b))) / 65535) )
+
+#elif CHAN_BITS == 32
+
+/* XXX floating-point color channels not fully thought-out */
+#define BYTE_TO_CHAN(b)   ((GLfloat) ((b) * (1.0F / 127.0F)))
+#define UBYTE_TO_CHAN(b)  ((GLfloat) ((b) * (1.0F / 255.0F)))
+#define SHORT_TO_CHAN(s)  ((GLfloat) ((s) * (1.0F / 32767.0F)))
+#define USHORT_TO_CHAN(s) ((GLfloat) ((s) * (1.0F / 65535.0F)))
+#define INT_TO_CHAN(i)    ((GLfloat) ((i) * (1.0F / 2147483647.0F)))
+#define UINT_TO_CHAN(i)   ((GLfloat) ((i) * (1.0F / 4294967295.0F)))
+
+#define CHAN_TO_FLOAT(c)  (c)
+
+#define FLOAT_COLOR_TO_CHAN(c, f)  c = f
+
+#define COPY_CHAN4(DST, SRC)  COPY_4V(DST, SRC)
+
+#define CHAN_PRODUCT(a, b)    ((a) * (b))
+
+#else 
+
+#error unexpected CHAN_BITS size
+
+#endif
+
+
+#define FLOAT_RGB_TO_CHAN_RGB(dst, f)		\
+do {						\
+   FLOAT_COLOR_TO_CHAN(dst[0], f[0]);		\
+   FLOAT_COLOR_TO_CHAN(dst[1], f[1]);		\
+   FLOAT_COLOR_TO_CHAN(dst[2], f[2]);		\
+} while(0)
+
+#define FLOAT_RGBA_TO_CHAN_RGBA(c, f)		\
+do {						\
+   FLOAT_COLOR_TO_CHAN(c[0], f[0]);		\
+   FLOAT_COLOR_TO_CHAN(c[1], f[1]);		\
+   FLOAT_COLOR_TO_CHAN(c[2], f[2]);		\
+   FLOAT_COLOR_TO_CHAN(c[3], f[3]);		\
+} while(0)
+
+
+#if CHAN_BITS == 32
+
+#define FLOAT_TO_CHAN(f)   (f)
+#define DOUBLE_TO_CHAN(f)  ((GLfloat) (f))
+
+#else
+
+#define FLOAT_TO_CHAN(f)   ( (GLchan) FloatToInt((f) * CHAN_MAXF + 0.5F) )
+#define DOUBLE_TO_CHAN(f)  ( (GLchan) FloatToInt((f) * CHAN_MAXF + 0.5F) )
+
+#endif
+
+
+#endif /* COLORMAC_H */
diff --git a/src/mesa/main/config.h b/src/mesa/main/config.h
index 35a0dde..901d614 100644
--- a/src/mesa/main/config.h
+++ b/src/mesa/main/config.h
@@ -1,4 +1,4 @@
-/* $Id: config.h,v 1.20 2000/10/28 18:34:48 brianp Exp $ */
+/* $Id: config.h,v 1.21 2000/10/28 20:41:13 brianp Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -162,12 +162,18 @@
  * Bits per color channel (must be 8 at this time!)
  */
 #define CHAN_BITS 8
-#define CHAN_MAX ((1 << CHAN_BITS) - 1)
-#define CHAN_MAXF ((GLfloat) CHAN_MAX)
 #if CHAN_BITS == 8
    typedef GLubyte GLchan;
+#define CHAN_MAX 255
+#define CHAN_MAXF 255.0F
 #elif CHAN_BITS == 16
    typedef GLushort GLchan;
+#define CHAN_MAX 65535
+#define CHAN_MAXF 65535.0F
+#elif CHAN_BITS == 32
+   typedef GLfloat GLchan;
+#define CHAN_MAX 1.0
+#define CHAN_MAXF 1.0F
 #else
 #error  illegal number of color channel bits
 #endif
diff --git a/src/mesa/main/convolve.c b/src/mesa/main/convolve.c
index 1c52bcc..b32b3e7 100644
--- a/src/mesa/main/convolve.c
+++ b/src/mesa/main/convolve.c
@@ -1,4 +1,4 @@
-/* $Id: convolve.c,v 1.6 2000/10/28 18:34:48 brianp Exp $ */
+/* $Id: convolve.c,v 1.7 2000/10/28 20:41:13 brianp Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -37,6 +37,7 @@
 #include "all.h"
 #else
 #include "glheader.h"
+#include "colormac.h"
 #include "convolve.h"
 #include "context.h"
 #include "image.h"
diff --git a/src/mesa/main/dlist.c b/src/mesa/main/dlist.c
index cb682c6..a0db2d3 100644
--- a/src/mesa/main/dlist.c
+++ b/src/mesa/main/dlist.c
@@ -1,4 +1,4 @@
-/* $Id: dlist.c,v 1.48 2000/10/27 18:31:21 brianp Exp $ */
+/* $Id: dlist.c,v 1.49 2000/10/28 20:41:13 brianp Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -36,6 +36,7 @@
 #include "blend.h"
 #include "buffers.h"
 #include "clip.h"
+#include "colormac.h"
 #include "colortab.h"
 #include "context.h"
 #include "convolve.h"
diff --git a/src/mesa/main/drawpix.c b/src/mesa/main/drawpix.c
index 177458c..6e1f6e0 100644
--- a/src/mesa/main/drawpix.c
+++ b/src/mesa/main/drawpix.c
@@ -1,4 +1,4 @@
-/* $Id: drawpix.c,v 1.39 2000/10/27 16:44:40 keithw Exp $ */
+/* $Id: drawpix.c,v 1.40 2000/10/28 20:41:13 brianp Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -29,6 +29,7 @@
 #include "all.h"
 #else
 #include "glheader.h"
+#include "colormac.h"
 #include "context.h"
 #include "convolve.h"
 #include "drawpix.h"
@@ -916,7 +917,10 @@
       if (ctx->Current.RasterPosValid) {
          GLfloat color[4];
 	 GLfloat texcoord[4], invq;
-	 UBYTE_RGBA_TO_FLOAT_RGBA(color, ctx->Current.ByteColor);
+         color[0] = CHAN_TO_FLOAT(ctx->Current.ByteColor[0]);
+         color[1] = CHAN_TO_FLOAT(ctx->Current.ByteColor[1]);
+         color[2] = CHAN_TO_FLOAT(ctx->Current.ByteColor[2]);
+         color[3] = CHAN_TO_FLOAT(ctx->Current.ByteColor[3]);
          invq = 1.0F / ctx->Current.Texcoord[0][3];
          texcoord[0] = ctx->Current.Texcoord[0][0] * invq;
          texcoord[1] = ctx->Current.Texcoord[0][1] * invq;
diff --git a/src/mesa/main/eval.c b/src/mesa/main/eval.c
index da1ad43..9a5bbc7 100644
--- a/src/mesa/main/eval.c
+++ b/src/mesa/main/eval.c
@@ -1,8 +1,8 @@
-/* $Id: eval.c,v 1.11 2000/09/11 18:49:06 brianp Exp $ */
+/* $Id: eval.c,v 1.12 2000/10/28 20:41:14 brianp Exp $ */
 
 /*
  * Mesa 3-D graphics library
- * Version:  3.3
+ * Version:  3.5
  * 
  * Copyright (C) 1999-2000  Brian Paul   All Rights Reserved.
  * 
@@ -42,6 +42,7 @@
 #include "all.h"
 #else
 #include "glheader.h"
+#include "colormac.h"
 #include "context.h"
 #include "eval.h"
 #include "macros.h"
@@ -2110,7 +2111,7 @@
 	 GLfloat u = (coord[i][0] - u1) * du;
 	 GLfloat fcolor[4];
 	 horner_bezier_curve(map->Points, fcolor, u, 4, map->Order);
-	 FLOAT_RGBA_TO_UBYTE_RGBA(to[i], fcolor);
+	 FLOAT_RGBA_TO_CHAN_RGBA(to[i], fcolor);
 	 flags[i+1] |= VERT_RGBA; /* reset */
       }
 
@@ -2270,7 +2271,7 @@
 	 GLfloat fcolor[4];
 	 horner_bezier_surf(map->Points, fcolor, u, v, 4,
 			    map->Uorder, map->Vorder);
-	 FLOAT_RGBA_TO_UBYTE_RGBA(to[i], fcolor);
+	 FLOAT_RGBA_TO_CHAN_RGBA(to[i], fcolor);
 	 flags[i+1] |= VERT_RGBA; /* reset */
       }
 
diff --git a/src/mesa/main/feedback.c b/src/mesa/main/feedback.c
index f9de16b..1a6b34d 100644
--- a/src/mesa/main/feedback.c
+++ b/src/mesa/main/feedback.c
@@ -1,4 +1,4 @@
-/* $Id: feedback.c,v 1.12 2000/10/28 18:34:48 brianp Exp $ */
+/* $Id: feedback.c,v 1.13 2000/10/28 20:41:14 brianp Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -29,6 +29,7 @@
 #include "all.h"
 #else
 #include "glheader.h"
+#include "colormac.h"
 #include "context.h"
 #include "enums.h"
 #include "feedback.h"
@@ -174,7 +175,10 @@
    if (ctx->Light.ShadeModel == GL_SMOOTH)
       pv = v;
 
-   CHAN_RGBA_TO_FLOAT_RGBA( color, VB->ColorPtr->data[pv] );
+   color[0] = CHAN_TO_FLOAT(VB->ColorPtr->data[pv][0]);
+   color[1] = CHAN_TO_FLOAT(VB->ColorPtr->data[pv][1]);
+   color[2] = CHAN_TO_FLOAT(VB->ColorPtr->data[pv][2]);
+   color[3] = CHAN_TO_FLOAT(VB->ColorPtr->data[pv][3]);
 
    if (VB->TexCoordPtr[texUnit]->size == 4 &&     
        VB->TexCoordPtr[texUnit]->data[v][3] != 0.0) {
diff --git a/src/mesa/main/fog.c b/src/mesa/main/fog.c
index a146a8f..4c15022 100644
--- a/src/mesa/main/fog.c
+++ b/src/mesa/main/fog.c
@@ -1,4 +1,4 @@
-/* $Id: fog.c,v 1.24 2000/10/28 18:34:48 brianp Exp $ */
+/* $Id: fog.c,v 1.25 2000/10/28 20:41:14 brianp Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -29,6 +29,7 @@
 #include "all.h"
 #else
 #include "glheader.h"
+#include "colormac.h"
 #include "context.h"
 #include "fog.h"
 #include "macros.h"
diff --git a/src/mesa/main/get.c b/src/mesa/main/get.c
index 9876f49..9123138 100644
--- a/src/mesa/main/get.c
+++ b/src/mesa/main/get.c
@@ -1,4 +1,4 @@
-/* $Id: get.c,v 1.36 2000/10/28 18:34:48 brianp Exp $ */
+/* $Id: get.c,v 1.37 2000/10/28 20:41:14 brianp Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -29,6 +29,7 @@
 #include "all.h"
 #else
 #include "glheader.h"
+#include "colormac.h"
 #include "context.h"
 #include "enable.h"
 #include "enums.h"
@@ -1418,10 +1419,10 @@
          *params = ENUM_TO_DOUBLE(ctx->Polygon.CullFaceMode);
          break;
       case GL_CURRENT_COLOR:
-         params[0] = CHAN_COLOR_TO_FLOAT_COLOR(ctx->Current.ByteColor[0]);
-         params[1] = CHAN_COLOR_TO_FLOAT_COLOR(ctx->Current.ByteColor[1]);
-         params[2] = CHAN_COLOR_TO_FLOAT_COLOR(ctx->Current.ByteColor[2]);
-         params[3] = CHAN_COLOR_TO_FLOAT_COLOR(ctx->Current.ByteColor[3]);
+         params[0] = CHAN_TO_FLOAT(ctx->Current.ByteColor[0]);
+         params[1] = CHAN_TO_FLOAT(ctx->Current.ByteColor[1]);
+         params[2] = CHAN_TO_FLOAT(ctx->Current.ByteColor[2]);
+         params[3] = CHAN_TO_FLOAT(ctx->Current.ByteColor[3]);
          break;
       case GL_CURRENT_INDEX:
          *params = (GLdouble) ctx->Current.Index;
@@ -2610,7 +2611,10 @@
          *params = ENUM_TO_FLOAT(ctx->Polygon.CullFaceMode);
          break;
       case GL_CURRENT_COLOR:
-	 CHAN_RGBA_TO_FLOAT_RGBA(params, ctx->Current.ByteColor);
+         params[0] = CHAN_TO_FLOAT(ctx->Current.ByteColor[0]);
+         params[1] = CHAN_TO_FLOAT(ctx->Current.ByteColor[1]);
+         params[2] = CHAN_TO_FLOAT(ctx->Current.ByteColor[2]);
+         params[3] = CHAN_TO_FLOAT(ctx->Current.ByteColor[3]);
          break;
       case GL_CURRENT_INDEX:
          *params = (GLfloat) ctx->Current.Index;
@@ -3775,10 +3779,10 @@
          *params = (GLint) ctx->Polygon.CullFaceMode;
          break;
       case GL_CURRENT_COLOR:
-         params[0] = FLOAT_TO_INT( CHAN_COLOR_TO_FLOAT_COLOR( ctx->Current.ByteColor[0] ) );
-         params[1] = FLOAT_TO_INT( CHAN_COLOR_TO_FLOAT_COLOR( ctx->Current.ByteColor[1] ) );
-         params[2] = FLOAT_TO_INT( CHAN_COLOR_TO_FLOAT_COLOR( ctx->Current.ByteColor[2] ) );
-         params[3] = FLOAT_TO_INT( CHAN_COLOR_TO_FLOAT_COLOR( ctx->Current.ByteColor[3] ) );
+         params[0] = FLOAT_TO_INT( CHAN_TO_FLOAT( ctx->Current.ByteColor[0] ) );
+         params[1] = FLOAT_TO_INT( CHAN_TO_FLOAT( ctx->Current.ByteColor[1] ) );
+         params[2] = FLOAT_TO_INT( CHAN_TO_FLOAT( ctx->Current.ByteColor[2] ) );
+         params[3] = FLOAT_TO_INT( CHAN_TO_FLOAT( ctx->Current.ByteColor[3] ) );
          break;
       case GL_CURRENT_INDEX:
          *params = (GLint) ctx->Current.Index;
diff --git a/src/mesa/main/image.c b/src/mesa/main/image.c
index af60908..7c4fa88 100644
--- a/src/mesa/main/image.c
+++ b/src/mesa/main/image.c
@@ -1,4 +1,4 @@
-/* $Id: image.c,v 1.43 2000/10/05 16:22:22 brianp Exp $ */
+/* $Id: image.c,v 1.44 2000/10/28 20:41:14 brianp Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -29,6 +29,7 @@
 #include "all.h"
 #else
 #include "glheader.h"
+#include "colormac.h"
 #include "context.h"
 #include "image.h"
 #include "imaging.h"
diff --git a/src/mesa/main/light.c b/src/mesa/main/light.c
index 1ed1178..38e74e7 100644
--- a/src/mesa/main/light.c
+++ b/src/mesa/main/light.c
@@ -1,4 +1,4 @@
-/* $Id: light.c,v 1.19 2000/10/28 18:34:48 brianp Exp $ */
+/* $Id: light.c,v 1.20 2000/10/28 20:41:14 brianp Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -29,6 +29,7 @@
 #include "all.h"
 #else
 #include "glheader.h"
+#include "colormac.h"
 #include "context.h"
 #include "enums.h"
 #include "light.h"
@@ -591,7 +592,7 @@
 	 ACC_SCALE_3V( light->MatDiffuse[0], light->Diffuse, tmp );
       }
       COPY_4FV( mat->Diffuse, src[0].Diffuse );
-      FLOAT_COLOR_TO_UBYTE_COLOR(ctx->Light.BaseAlpha[0], mat->Diffuse[3]);
+      FLOAT_COLOR_TO_CHAN(ctx->Light.BaseAlpha[0], mat->Diffuse[3]);
    }
    if (bitmask & BACK_DIFFUSE_BIT) {
       struct gl_material *mat = &ctx->Light.Material[1];
@@ -601,7 +602,7 @@
 	 ACC_SCALE_3V( light->MatDiffuse[1], light->Diffuse, tmp );
       }
       COPY_4FV( mat->Diffuse, src[1].Diffuse );
-      FLOAT_COLOR_TO_UBYTE_COLOR(ctx->Light.BaseAlpha[1], mat->Diffuse[3]);
+      FLOAT_COLOR_TO_CHAN(ctx->Light.BaseAlpha[1], mat->Diffuse[3]);
    }
 
    /* update material specular values */
@@ -691,8 +692,11 @@
    GLuint bitmask = ctx->Light.ColorMaterialBitmask;
    GLfloat color[4];
 
-   UBYTE_RGBA_TO_FLOAT_RGBA( color, rgba );
-   
+   color[0] = CHAN_TO_FLOAT(rgba[0]);
+   color[1] = CHAN_TO_FLOAT(rgba[1]);
+   color[2] = CHAN_TO_FLOAT(rgba[2]);
+   color[3] = CHAN_TO_FLOAT(rgba[3]);
+
    if (MESA_VERBOSE&VERBOSE_IMMEDIATE)
       fprintf(stderr, "gl_update_color_material, mask 0x%x\n", bitmask);
 
@@ -746,7 +750,7 @@
 	 ACC_SCALE_3V( light->MatDiffuse[0], light->Diffuse, tmp );
       }
       COPY_4FV( mat->Diffuse, color );
-      FLOAT_COLOR_TO_UBYTE_COLOR(ctx->Light.BaseAlpha[0], mat->Diffuse[3]);
+      FLOAT_COLOR_TO_CHAN(ctx->Light.BaseAlpha[0], mat->Diffuse[3]);
    }
 
    if (bitmask & BACK_DIFFUSE_BIT) {
@@ -757,7 +761,7 @@
 	 ACC_SCALE_3V( light->MatDiffuse[1], light->Diffuse, tmp );
       }
       COPY_4FV( mat->Diffuse, color );
-      FLOAT_COLOR_TO_UBYTE_COLOR(ctx->Light.BaseAlpha[1], mat->Diffuse[3]);
+      FLOAT_COLOR_TO_CHAN(ctx->Light.BaseAlpha[1], mat->Diffuse[3]);
    }
 
    /* update light->MatSpecular = light's specular * material's specular */
@@ -1280,8 +1284,8 @@
 		      ctx->Light.Model.Ambient,
 		      mat->Ambient);
 
-	 FLOAT_COLOR_TO_UBYTE_COLOR(ctx->Light.BaseAlpha[side],
-				    ctx->Light.Material[side].Diffuse[3] );
+	 FLOAT_COLOR_TO_CHAN(ctx->Light.BaseAlpha[side],
+                             ctx->Light.Material[side].Diffuse[3] );
       }
       
       foreach (light, &ctx->Light.EnabledList) {	 
diff --git a/src/mesa/main/macros.h b/src/mesa/main/macros.h
index 443e273..05c80d1 100644
--- a/src/mesa/main/macros.h
+++ b/src/mesa/main/macros.h
@@ -1,10 +1,10 @@
-/* $Id: macros.h,v 1.10 2000/10/28 18:34:48 brianp Exp $ */
+/* $Id: macros.h,v 1.11 2000/10/28 20:41:14 brianp Exp $ */
 
 /*
  * Mesa 3-D graphics library
- * Version:  3.3
+ * Version:  3.5
  * 
- * Copyright (C) 1999  Brian Paul   All Rights Reserved.
+ * Copyright (C) 1999-2000  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"),
@@ -124,6 +124,19 @@
    (DST)[3] = (SRC)[3];				\
 } while (0)
 
+#define COPY_4UBV(DST, SRC)			\
+do {						\
+   if (sizeof(GLuint)==4*sizeof(GLubyte)) {	\
+      *((GLuint*)(DST)) = *((GLuint*)(SRC));	\
+   }						\
+   else {					\
+      (DST)[0] = (SRC)[0];			\
+      (DST)[1] = (SRC)[1];			\
+      (DST)[2] = (SRC)[2];			\
+      (DST)[3] = (SRC)[3];			\
+   }						\
+} while (0)
+
 
 #define COPY_2FV( DST, SRC )			\
 do {						\
@@ -351,26 +364,6 @@
 
 
 
-/*
- * Copy a vector of 4 GLubytes from SRC to DST.
- */
-#define COPY_4UBV(DST, SRC)			\
-do {						\
-   if (sizeof(GLuint)==4*sizeof(GLubyte)) {	\
-      *((GLuint*)(DST)) = *((GLuint*)(SRC));	\
-   }						\
-   else {					\
-      (DST)[0] = (SRC)[0];			\
-      (DST)[1] = (SRC)[1];			\
-      (DST)[2] = (SRC)[2];			\
-      (DST)[3] = (SRC)[3];			\
-   }						\
-} while (0)
-
-
-#define COPY_CHAN4(DST, SRC)  COPY_4UBV(DST, SRC)
-
-
 /* Assign scalers to short vectors: */
 #define ASSIGN_2V( V, V0, V1 )	\
 do { 				\
@@ -436,7 +429,7 @@
 #define DOT4( a, b )  ( (a)[0]*(b)[0] + (a)[1]*(b)[1] + \
 			(a)[2]*(b)[2] + (a)[3]*(b)[3] )
 
-#define DOT4V(v,a,b,c,d) (v[0]*a + v[1]*b + v[2]*c + v[3]*d)
+#define DOT4V(v,a,b,c,d) (v[0]*(a) + v[1]*(b) + v[2]*(c) + v[3]*(d))
 
 
 #define CROSS3(n, u, v) 			\
@@ -447,63 +440,4 @@
 } while (0)
 
 
-/*
- * Integer / float conversion for colors, normals, etc.
- */
-
-#define BYTE_TO_UBYTE(b)   (b < 0 ? 0 : (GLubyte) b)
-#define SHORT_TO_UBYTE(s)  (s < 0 ? 0 : (GLubyte) (s >> 7))
-#define USHORT_TO_UBYTE(s)              (GLubyte) (s >> 8)
-#define INT_TO_UBYTE(i)    (i < 0 ? 0 : (GLubyte) (i >> 23))
-#define UINT_TO_UBYTE(i)                (GLubyte) (i >> 24)
-
-/* Convert GLubyte in [0,255] to GLfloat in [0.0,1.0] */
-#define UBYTE_TO_FLOAT(B)	((GLfloat) (B) * (1.0F / 255.0F))
-
-/* Convert GLfloat in [0.0,1.0] to GLubyte in [0,255] */
-#define FLOAT_TO_UBYTE(X)	((GLubyte) (GLint) (((X)) * 255.0F))
-
-
-/* Convert GLbyte in [-128,127] to GLfloat in [-1.0,1.0] */
-#define BYTE_TO_FLOAT(B)	((2.0F * (B) + 1.0F) * (1.0F/255.0F))
-
-/* Convert GLfloat in [-1.0,1.0] to GLbyte in [-128,127] */
-#define FLOAT_TO_BYTE(X)	( (((GLint) (255.0F * (X))) - 1) / 2 )
-
-
-/* Convert GLushort in [0,65536] to GLfloat in [0.0,1.0] */
-#define USHORT_TO_FLOAT(S)	((GLfloat) (S) * (1.0F / 65535.0F))
-
-/* Convert GLfloat in [0.0,1.0] to GLushort in [0,65536] */
-#define FLOAT_TO_USHORT(X)	((GLushort) (GLint) ((X) * 65535.0F))
-
-
-/* Convert GLshort in [-32768,32767] to GLfloat in [-1.0,1.0] */
-#define SHORT_TO_FLOAT(S)	((2.0F * (S) + 1.0F) * (1.0F/65535.0F))
-
-/* Convert GLfloat in [0.0,1.0] to GLshort in [-32768,32767] */
-#define FLOAT_TO_SHORT(X)	( (((GLint) (65535.0F * (X))) - 1) / 2 )
-
-
-/* Convert GLuint in [0,4294967295] to GLfloat in [0.0,1.0] */
-#define UINT_TO_FLOAT(U)	((GLfloat) (U) * (1.0F / 4294967295.0F))
-
-/* Convert GLfloat in [0.0,1.0] to GLuint in [0,4294967295] */
-#define FLOAT_TO_UINT(X)	((GLuint) ((X) * 4294967295.0))
-
-
-/* Convert GLint in [-2147483648,2147483647] to GLfloat in [-1.0,1.0] */
-#define INT_TO_FLOAT(I)		((2.0F * (I) + 1.0F) * (1.0F/4294967294.0F))
-
-/* Convert GLfloat in [-1.0,1.0] to GLint in [-2147483648,2147483647] */
-/* causes overflow:
-#define FLOAT_TO_INT(X)		( (((GLint) (4294967294.0F * (X))) - 1) / 2 )
-*/
-/* a close approximation: */
-#define FLOAT_TO_INT(X)		( (GLint) (2147483647.0 * (X)) )
-
-
-/* XXX chan fix me */
-#define CHAN_TO_FLOAT(C)        ( (GLfloat) ((C) * (1.0 / CHAN_MAXF)) )
-
 #endif
diff --git a/src/mesa/main/pixel.c b/src/mesa/main/pixel.c
index 703d129..8a1d598 100644
--- a/src/mesa/main/pixel.c
+++ b/src/mesa/main/pixel.c
@@ -1,4 +1,4 @@
-/* $Id: pixel.c,v 1.14 2000/10/28 18:34:48 brianp Exp $ */
+/* $Id: pixel.c,v 1.15 2000/10/28 20:41:14 brianp Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -29,6 +29,7 @@
 #include "all.h"
 #else
 #include "glheader.h"
+#include "colormac.h"
 #include "context.h"
 #include "macros.h"
 #include "mem.h"
diff --git a/src/mesa/main/rastpos.c b/src/mesa/main/rastpos.c
index a262ed3..b4d36bb 100644
--- a/src/mesa/main/rastpos.c
+++ b/src/mesa/main/rastpos.c
@@ -1,4 +1,4 @@
-/* $Id: rastpos.c,v 1.9 2000/10/28 18:34:48 brianp Exp $ */
+/* $Id: rastpos.c,v 1.10 2000/10/28 20:41:14 brianp Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -30,6 +30,7 @@
 #else
 #include "glheader.h"
 #include "clip.h"
+#include "colormac.h"
 #include "context.h"
 #include "feedback.h"
 #include "light.h"
@@ -91,8 +92,10 @@
    else {
       /* use current color or index */
       if (ctx->Visual.RGBAflag) {
-	 CHAN_RGBA_TO_FLOAT_RGBA(ctx->Current.RasterColor, 
-                                 ctx->Current.ByteColor);
+         ctx->Current.RasterColor[0] = CHAN_TO_FLOAT(ctx->Current.ByteColor[0]);
+         ctx->Current.RasterColor[1] = CHAN_TO_FLOAT(ctx->Current.ByteColor[1]);
+         ctx->Current.RasterColor[2] = CHAN_TO_FLOAT(ctx->Current.ByteColor[2]);
+         ctx->Current.RasterColor[3] = CHAN_TO_FLOAT(ctx->Current.ByteColor[3]);
       }
       else {
 	 ctx->Current.RasterIndex = ctx->Current.Index;
diff --git a/src/mesa/main/texstate.c b/src/mesa/main/texstate.c
index d403726..309b54f 100644
--- a/src/mesa/main/texstate.c
+++ b/src/mesa/main/texstate.c
@@ -1,4 +1,4 @@
-/* $Id: texstate.c,v 1.17 2000/10/28 18:34:48 brianp Exp $ */
+/* $Id: texstate.c,v 1.18 2000/10/28 20:41:14 brianp Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -29,6 +29,7 @@
 #include "all.h"
 #else
 #include "glheader.h"
+#include "colormac.h"
 #include "context.h"
 #include "enums.h"
 #include "extensions.h"