New colormac.h file for color-related macros.

Lot's of clean-up in macros.h and mmath.h
This commit is contained in:
Brian Paul
2000-10-28 20:41:13 +00:00
parent ba643a2094
commit c893a015d8
16 changed files with 277 additions and 123 deletions

View File

@@ -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"

187
src/mesa/main/colormac.h Normal file
View File

@@ -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 */

View File

@@ -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

View File

@@ -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"

View File

@@ -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"

View File

@@ -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;

View File

@@ -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 */
}

View File

@@ -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) {

View File

@@ -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"

View File

@@ -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;

View File

@@ -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"

View File

@@ -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) {

View File

@@ -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

View File

@@ -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"

View File

@@ -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;

View File

@@ -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"