diff options
-rw-r--r-- | src/mesa/main/clip.c | 3 | ||||
-rw-r--r-- | src/mesa/main/colormac.h | 187 | ||||
-rw-r--r-- | src/mesa/main/config.h | 12 | ||||
-rw-r--r-- | src/mesa/main/convolve.c | 3 | ||||
-rw-r--r-- | src/mesa/main/dlist.c | 3 | ||||
-rw-r--r-- | src/mesa/main/drawpix.c | 8 | ||||
-rw-r--r-- | src/mesa/main/eval.c | 9 | ||||
-rw-r--r-- | src/mesa/main/feedback.c | 8 | ||||
-rw-r--r-- | src/mesa/main/fog.c | 3 | ||||
-rw-r--r-- | src/mesa/main/get.c | 24 | ||||
-rw-r--r-- | src/mesa/main/image.c | 3 | ||||
-rw-r--r-- | src/mesa/main/light.c | 22 | ||||
-rw-r--r-- | src/mesa/main/macros.h | 100 | ||||
-rw-r--r-- | src/mesa/main/pixel.c | 3 | ||||
-rw-r--r-- | src/mesa/main/rastpos.c | 9 | ||||
-rw-r--r-- | src/mesa/main/texstate.c | 3 |
16 files changed, 277 insertions, 123 deletions
diff --git a/src/mesa/main/clip.c b/src/mesa/main/clip.c index 1e98358aa1..92788c638f 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 0000000000..5d125e2725 --- /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 35a0dded6a..901d614b10 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 1c52bcc12a..b32b3e7373 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 cb682c6ffc..a0db2d3fc5 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 177458c9ea..6e1f6e0a09 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 @@ _mesa_DrawPixels( GLsizei width, GLsizei height, 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 da1ad43161..9a5bbc7c64 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 @@ static GLvector4ub *eval1_color( GLvector4ub *dest, 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 @@ static GLvector4ub *eval2_color( GLvector4ub *dest, 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 f9de16b893..1a6b34d7fe 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 @@ static void feedback_vertex( GLcontext *ctx, GLuint v, GLuint pv ) 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 a146a8f47a..4c1502227c 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 9876f4951b..9123138caa 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 @@ _mesa_GetDoublev( GLenum pname, GLdouble *params ) *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 @@ _mesa_GetFloatv( GLenum pname, GLfloat *params ) *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 @@ _mesa_GetIntegerv( GLenum pname, GLint *params ) *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 af60908280..7c4fa88782 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 1ed1178e12..38e74e7115 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 @@ void gl_update_material( GLcontext *ctx, 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 @@ void gl_update_material( GLcontext *ctx, 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 @@ void gl_update_color_material( GLcontext *ctx, 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 @@ void gl_update_color_material( GLcontext *ctx, 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 @@ void gl_update_color_material( GLcontext *ctx, 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 @@ gl_update_lighting( GLcontext *ctx ) 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 443e2731c6..05c80d1a15 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 @@ do { \ (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 @@ do { \ -/* - * 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 @@ do { \ #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 @@ do { \ } 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 703d129444..8a1d598200 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 a262ed3002..b4d36bbb0d 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 @@ static void raster_pos4f( GLcontext *ctx, 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 d403726789..309b54fe80 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" |