summaryrefslogtreecommitdiffstats
path: root/src/mesa/main
diff options
context:
space:
mode:
Diffstat (limited to 'src/mesa/main')
-rw-r--r--src/mesa/main/colortab.c84
-rw-r--r--src/mesa/main/mtypes.h4
-rw-r--r--src/mesa/main/pixel.c13
3 files changed, 59 insertions, 42 deletions
diff --git a/src/mesa/main/colortab.c b/src/mesa/main/colortab.c
index a44f9a01c54..d0fa323c39b 100644
--- a/src/mesa/main/colortab.c
+++ b/src/mesa/main/colortab.c
@@ -1,9 +1,8 @@
-
/*
* Mesa 3-D graphics library
- * Version: 5.1
+ * Version: 6.1
*
- * Copyright (C) 1999-2003 Brian Paul All Rights Reserved.
+ * Copyright (C) 1999-2004 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"),
@@ -99,12 +98,29 @@ base_colortab_format( GLenum format )
static void
set_component_sizes( struct gl_color_table *table )
{
+ GLubyte sz;
+
+ switch (table->Type) {
+ case GL_UNSIGNED_BYTE:
+ sz = sizeof(GLubyte);
+ break;
+ case GL_UNSIGNED_SHORT:
+ sz = sizeof(GLushort);
+ break;
+ case GL_FLOAT:
+ sz = sizeof(GLfloat);
+ break;
+ default:
+ _mesa_problem(NULL, "bad color table type in set_component_sizes 0x%x", table->Type);
+ return;
+ }
+
switch (table->Format) {
case GL_ALPHA:
table->RedSize = 0;
table->GreenSize = 0;
table->BlueSize = 0;
- table->AlphaSize = CHAN_BITS;
+ table->AlphaSize = sz;
table->IntensitySize = 0;
table->LuminanceSize = 0;
break;
@@ -114,37 +130,37 @@ set_component_sizes( struct gl_color_table *table )
table->BlueSize = 0;
table->AlphaSize = 0;
table->IntensitySize = 0;
- table->LuminanceSize = CHAN_BITS;
+ table->LuminanceSize = sz;
break;
case GL_LUMINANCE_ALPHA:
table->RedSize = 0;
table->GreenSize = 0;
table->BlueSize = 0;
- table->AlphaSize = CHAN_BITS;
+ table->AlphaSize = sz;
table->IntensitySize = 0;
- table->LuminanceSize = CHAN_BITS;
+ table->LuminanceSize = sz;
break;
case GL_INTENSITY:
table->RedSize = 0;
table->GreenSize = 0;
table->BlueSize = 0;
table->AlphaSize = 0;
- table->IntensitySize = CHAN_BITS;
+ table->IntensitySize = sz;
table->LuminanceSize = 0;
break;
case GL_RGB:
- table->RedSize = CHAN_BITS;
- table->GreenSize = CHAN_BITS;
- table->BlueSize = CHAN_BITS;
+ table->RedSize = sz;
+ table->GreenSize = sz;
+ table->BlueSize = sz;
table->AlphaSize = 0;
table->IntensitySize = 0;
table->LuminanceSize = 0;
break;
case GL_RGBA:
- table->RedSize = CHAN_BITS;
- table->GreenSize = CHAN_BITS;
- table->BlueSize = CHAN_BITS;
- table->AlphaSize = CHAN_BITS;
+ table->RedSize = sz;
+ table->GreenSize = sz;
+ table->BlueSize = sz;
+ table->AlphaSize = sz;
table->IntensitySize = 0;
table->LuminanceSize = 0;
break;
@@ -168,7 +184,7 @@ _mesa_ColorTable( GLenum target, GLenum internalFormat,
GLint baseFormat;
GLfloat rScale = 1.0, gScale = 1.0, bScale = 1.0, aScale = 1.0;
GLfloat rBias = 0.0, gBias = 0.0, bBias = 0.0, aBias = 0.0;
- GLboolean floatTable = GL_FALSE;
+ GLenum tableType = CHAN_TYPE;
GLint comps;
ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx); /* too complex */
@@ -221,7 +237,7 @@ _mesa_ColorTable( GLenum target, GLenum internalFormat,
break;
case GL_COLOR_TABLE:
table = &ctx->ColorTable;
- floatTable = GL_TRUE;
+ tableType = GL_FLOAT;
rScale = ctx->Pixel.ColorTableScale[0];
gScale = ctx->Pixel.ColorTableScale[1];
bScale = ctx->Pixel.ColorTableScale[2];
@@ -241,7 +257,7 @@ _mesa_ColorTable( GLenum target, GLenum internalFormat,
return;
}
table = &(texUnit->ColorTable);
- floatTable = GL_TRUE;
+ tableType = GL_FLOAT;
rScale = ctx->Pixel.TextureColorTableScale[0];
gScale = ctx->Pixel.TextureColorTableScale[1];
bScale = ctx->Pixel.TextureColorTableScale[2];
@@ -261,7 +277,7 @@ _mesa_ColorTable( GLenum target, GLenum internalFormat,
break;
case GL_POST_CONVOLUTION_COLOR_TABLE:
table = &ctx->PostConvolutionColorTable;
- floatTable = GL_TRUE;
+ tableType = GL_FLOAT;
rScale = ctx->Pixel.PCCTscale[0];
gScale = ctx->Pixel.PCCTscale[1];
bScale = ctx->Pixel.PCCTscale[2];
@@ -277,7 +293,7 @@ _mesa_ColorTable( GLenum target, GLenum internalFormat,
break;
case GL_POST_COLOR_MATRIX_COLOR_TABLE:
table = &ctx->PostColorMatrixColorTable;
- floatTable = GL_TRUE;
+ tableType = GL_FLOAT;
rScale = ctx->Pixel.PCMCTscale[0];
gScale = ctx->Pixel.PCMCTscale[1];
bScale = ctx->Pixel.PCMCTscale[2];
@@ -350,7 +366,7 @@ _mesa_ColorTable( GLenum target, GLenum internalFormat,
table->Table = NULL;
}
if (width > 0) {
- if (floatTable) {
+ if (tableType == GL_FLOAT) {
GLfloat tempTab[MAX_COLOR_TABLE_SIZE * 4];
GLfloat *tableF;
GLint i;
@@ -360,7 +376,7 @@ _mesa_ColorTable( GLenum target, GLenum internalFormat,
format, type, data, &ctx->Unpack,
0, GL_FALSE);
- table->FloatTable = GL_TRUE;
+ table->Type = GL_FLOAT;
table->Table = MALLOC(comps * width * sizeof(GLfloat));
if (!table->Table) {
_mesa_error(ctx, GL_OUT_OF_MEMORY, "glColorTable");
@@ -413,7 +429,7 @@ _mesa_ColorTable( GLenum target, GLenum internalFormat,
}
else {
/* store GLchan table */
- table->FloatTable = GL_FALSE;
+ table->Type = CHAN_TYPE;
table->Table = MALLOC(comps * width * sizeof(GLchan));
if (!table->Table) {
_mesa_error(ctx, GL_OUT_OF_MEMORY, "glColorTable");
@@ -423,7 +439,7 @@ _mesa_ColorTable( GLenum target, GLenum internalFormat,
(GLchan *) table->Table, /* dest */
format, type, data,
&ctx->Unpack, 0);
- } /* floatTable */
+ } /* type==GL_FLOAT */
} /* width > 0 */
} /* proxy */
@@ -556,7 +572,7 @@ _mesa_ColorSubTable( GLenum target, GLsizei start,
return;
}
- if (!table->FloatTable) {
+ if (table->Type != GL_FLOAT) {
GLchan *dest = (GLchan *) table->Table + start * comps * sizeof(GLchan);
_mesa_unpack_chan_color_span(ctx, count, table->Format, dest,
format, type, data, &ctx->Unpack, 0);
@@ -566,7 +582,7 @@ _mesa_ColorSubTable( GLenum target, GLsizei start,
GLfloat *tableF;
GLint i;
- ASSERT(table->FloatTable);
+ ASSERT(table->Type == GL_FLOAT);
_mesa_unpack_float_color_span(ctx, count, table->Format,
tempTab, /* dest */
@@ -718,11 +734,11 @@ _mesa_GetColorTable( GLenum target, GLenum format,
return;
}
- assert(table);
+ ASSERT(table);
switch (table->Format) {
case GL_ALPHA:
- if (table->FloatTable) {
+ if (table->Type == GL_FLOAT) {
const GLfloat *tableF = (const GLfloat *) table->Table;
GLuint i;
for (i = 0; i < table->Size; i++) {
@@ -744,7 +760,7 @@ _mesa_GetColorTable( GLenum target, GLenum format,
}
break;
case GL_LUMINANCE:
- if (table->FloatTable) {
+ if (table->Type == GL_FLOAT) {
const GLfloat *tableF = (const GLfloat *) table->Table;
GLuint i;
for (i = 0; i < table->Size; i++) {
@@ -766,7 +782,7 @@ _mesa_GetColorTable( GLenum target, GLenum format,
}
break;
case GL_LUMINANCE_ALPHA:
- if (table->FloatTable) {
+ if (table->Type == GL_FLOAT) {
const GLfloat *tableF = (const GLfloat *) table->Table;
GLuint i;
for (i = 0; i < table->Size; i++) {
@@ -788,7 +804,7 @@ _mesa_GetColorTable( GLenum target, GLenum format,
}
break;
case GL_INTENSITY:
- if (table->FloatTable) {
+ if (table->Type == GL_FLOAT) {
const GLfloat *tableF = (const GLfloat *) table->Table;
GLuint i;
for (i = 0; i < table->Size; i++) {
@@ -810,7 +826,7 @@ _mesa_GetColorTable( GLenum target, GLenum format,
}
break;
case GL_RGB:
- if (table->FloatTable) {
+ if (table->Type == GL_FLOAT) {
const GLfloat *tableF = (const GLfloat *) table->Table;
GLuint i;
for (i = 0; i < table->Size; i++) {
@@ -832,7 +848,7 @@ _mesa_GetColorTable( GLenum target, GLenum format,
}
break;
case GL_RGBA:
- if (table->FloatTable) {
+ if (table->Type == GL_FLOAT) {
const GLfloat *tableF = (const GLfloat *) table->Table;
GLuint i;
for (i = 0; i < table->Size; i++) {
@@ -1334,7 +1350,7 @@ _mesa_GetColorTableParameteriv( GLenum target, GLenum pname, GLint *params )
void
_mesa_init_colortable( struct gl_color_table *p )
{
- p->FloatTable = GL_FALSE;
+ p->Type = CHAN_TYPE;
p->Table = NULL;
p->Size = 0;
p->IntFormat = GL_RGBA;
diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h
index 84fa39f261a..18e15631021 100644
--- a/src/mesa/main/mtypes.h
+++ b/src/mesa/main/mtypes.h
@@ -252,8 +252,8 @@ struct gl_color_table {
GLenum Format; /**< GL_ALPHA, GL_RGB, GL_RGB, etc */
GLenum IntFormat;
GLuint Size; /**< number of entries (rows) in table */
- GLvoid *Table; /**< either GLfloat * or GLchan * */
- GLboolean FloatTable; /**< are entries stored as floats? */
+ GLvoid *Table; /**< points to data of <Type> */
+ GLenum Type; /**< GL_UNSIGNED_BYTE or GL_FLOAT */
GLubyte RedSize;
GLubyte GreenSize;
GLubyte BlueSize;
diff --git a/src/mesa/main/pixel.c b/src/mesa/main/pixel.c
index 61c7e570da1..f211af91703 100644
--- a/src/mesa/main/pixel.c
+++ b/src/mesa/main/pixel.c
@@ -877,6 +877,7 @@ _mesa_transform_rgba(const GLcontext *ctx, GLuint n, GLfloat rgba[][4])
/*
* Apply a color table lookup to an array of colors.
+ * XXX merge with _swrast_texture_table_lookup in s_texture.c
*/
void
_mesa_lookup_rgba(const struct gl_color_table *table,
@@ -888,7 +889,7 @@ _mesa_lookup_rgba(const struct gl_color_table *table,
switch (table->Format) {
case GL_INTENSITY:
/* replace RGBA with I */
- if (!table->FloatTable) {
+ if (table->Type != GL_FLOAT) {
const GLint max = table->Size - 1;
const GLfloat scale = (GLfloat) max;
const GLchan *lut = (const GLchan *) table->Table;
@@ -915,7 +916,7 @@ _mesa_lookup_rgba(const struct gl_color_table *table,
break;
case GL_LUMINANCE:
/* replace RGB with L */
- if (!table->FloatTable) {
+ if (table->Type != GL_FLOAT) {
const GLint max = table->Size - 1;
const GLfloat scale = (GLfloat) max;
const GLchan *lut = (const GLchan *) table->Table;
@@ -940,7 +941,7 @@ _mesa_lookup_rgba(const struct gl_color_table *table,
break;
case GL_ALPHA:
/* replace A with A */
- if (!table->FloatTable) {
+ if (table->Type != GL_FLOAT) {
const GLint max = table->Size - 1;
const GLfloat scale = (GLfloat) max;
const GLchan *lut = (const GLchan *) table->Table;
@@ -963,7 +964,7 @@ _mesa_lookup_rgba(const struct gl_color_table *table,
break;
case GL_LUMINANCE_ALPHA:
/* replace RGBA with LLLA */
- if (!table->FloatTable) {
+ if (table->Type != GL_FLOAT) {
const GLint max = table->Size - 1;
const GLfloat scale = (GLfloat) max;
const GLchan *lut = (const GLchan *) table->Table;
@@ -1000,7 +1001,7 @@ _mesa_lookup_rgba(const struct gl_color_table *table,
break;
case GL_RGB:
/* replace RGB with RGB */
- if (!table->FloatTable) {
+ if (table->Type != GL_FLOAT) {
const GLint max = table->Size - 1;
const GLfloat scale = (GLfloat) max;
const GLchan *lut = (const GLchan *) table->Table;
@@ -1037,7 +1038,7 @@ _mesa_lookup_rgba(const struct gl_color_table *table,
break;
case GL_RGBA:
/* replace RGBA with RGBA */
- if (!table->FloatTable) {
+ if (table->Type != GL_FLOAT) {
const GLint max = table->Size - 1;
const GLfloat scale = (GLfloat) max;
const GLchan *lut = (const GLchan *) table->Table;