summaryrefslogtreecommitdiff
path: root/src/mesa/main/pixel.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/mesa/main/pixel.c')
-rw-r--r--src/mesa/main/pixel.c80
1 files changed, 58 insertions, 22 deletions
diff --git a/src/mesa/main/pixel.c b/src/mesa/main/pixel.c
index 8a1d598200..131db1dfdd 100644
--- a/src/mesa/main/pixel.c
+++ b/src/mesa/main/pixel.c
@@ -1,4 +1,4 @@
-/* $Id: pixel.c,v 1.15 2000/10/28 20:41:14 brianp Exp $ */
+/* $Id: pixel.c,v 1.16 2000/10/29 18:12:15 brianp Exp $ */
/*
* Mesa 3-D graphics library
@@ -755,11 +755,11 @@ _mesa_lookup_rgba(const struct gl_color_table *table,
/* replace RGBA with I */
if (!table->FloatTable) {
const GLfloat scale = (GLfloat) (table->Size - 1);
- const GLubyte *lut = (const GLubyte *) table->Table;
+ const GLchan *lut = (const GLchan *) table->Table;
GLuint i;
for (i = 0; i < n; i++) {
GLint j = (GLint) (rgba[i][RCOMP] * scale + 0.5F);
- GLfloat c = lut[j] * (1.0F / 255.0F);
+ GLfloat c = CHAN_TO_FLOAT(lut[j]);
rgba[i][RCOMP] = rgba[i][GCOMP] =
rgba[i][BCOMP] = rgba[i][ACOMP] = c;
}
@@ -781,11 +781,11 @@ _mesa_lookup_rgba(const struct gl_color_table *table,
/* replace RGB with L */
if (!table->FloatTable) {
const GLfloat scale = (GLfloat) (table->Size - 1);
- const GLubyte *lut = (const GLubyte *) table->Table;
+ const GLchan *lut = (const GLchan *) table->Table;
GLuint i;
for (i = 0; i < n; i++) {
GLint j = (GLint) (rgba[i][RCOMP] * scale + 0.5F);
- GLfloat c = lut[j] * (1.0F / 255.0F);
+ GLfloat c = CHAN_TO_FLOAT(lut[j]);
rgba[i][RCOMP] = rgba[i][GCOMP] = rgba[i][BCOMP] = c;
}
}
@@ -804,11 +804,11 @@ _mesa_lookup_rgba(const struct gl_color_table *table,
/* replace A with A */
if (!table->FloatTable) {
const GLfloat scale = (GLfloat) (table->Size - 1);
- const GLubyte *lut = (const GLubyte *) table->Table;
+ const GLchan *lut = (const GLchan *) table->Table;
GLuint i;
for (i = 0; i < n; i++) {
GLint j = (GLint) (rgba[i][ACOMP] * scale + 0.5F);
- rgba[i][ACOMP] = lut[j] * (1.0F / 255.0F);
+ rgba[i][ACOMP] = CHAN_TO_FLOAT(lut[j]);
}
}
else {
@@ -825,13 +825,13 @@ _mesa_lookup_rgba(const struct gl_color_table *table,
/* replace RGBA with LLLA */
if (!table->FloatTable) {
const GLfloat scale = (GLfloat) (table->Size - 1);
- const GLubyte *lut = (const GLubyte *) table->Table;
+ const GLchan *lut = (const GLchan *) table->Table;
GLuint i;
for (i = 0; i < n; i++) {
GLint jL = (GLint) (rgba[i][RCOMP] * scale + 0.5F);
GLint jA = (GLint) (rgba[i][ACOMP] * scale + 0.5F);
- GLfloat luminance = lut[jL * 2 + 0] * (1.0F / 255.0F);
- GLfloat alpha = lut[jA * 2 + 1] * (1.0F / 255.0F);
+ GLfloat luminance = CHAN_TO_FLOAT(lut[jL * 2 + 0]);
+ GLfloat alpha = CHAN_TO_FLOAT(lut[jA * 2 + 1]);
rgba[i][RCOMP] = rgba[i][GCOMP] = rgba[i][BCOMP] = luminance;
rgba[i][ACOMP] = alpha;;
}
@@ -854,15 +854,15 @@ _mesa_lookup_rgba(const struct gl_color_table *table,
/* replace RGB with RGB */
if (!table->FloatTable) {
const GLfloat scale = (GLfloat) (table->Size - 1);
- const GLubyte *lut = (const GLubyte *) table->Table;
+ const GLchan *lut = (const GLchan *) table->Table;
GLuint i;
for (i = 0; i < n; i++) {
GLint jR = (GLint) (rgba[i][RCOMP] * scale + 0.5F);
GLint jG = (GLint) (rgba[i][GCOMP] * scale + 0.5F);
GLint jB = (GLint) (rgba[i][BCOMP] * scale + 0.5F);
- rgba[i][RCOMP] = lut[jR * 3 + 0] * (1.0F / 255.0F);
- rgba[i][GCOMP] = lut[jG * 3 + 1] * (1.0F / 255.0F);
- rgba[i][BCOMP] = lut[jB * 3 + 2] * (1.0F / 255.0F);
+ rgba[i][RCOMP] = CHAN_TO_FLOAT(lut[jR * 3 + 0]);
+ rgba[i][GCOMP] = CHAN_TO_FLOAT(lut[jG * 3 + 1]);
+ rgba[i][BCOMP] = CHAN_TO_FLOAT(lut[jB * 3 + 2]);
}
}
else {
@@ -883,17 +883,17 @@ _mesa_lookup_rgba(const struct gl_color_table *table,
/* replace RGBA with RGBA */
if (!table->FloatTable) {
const GLfloat scale = (GLfloat) (table->Size - 1);
- const GLubyte *lut = (const GLubyte *) table->Table;
+ const GLchan *lut = (const GLchan *) table->Table;
GLuint i;
for (i = 0; i < n; i++) {
GLint jR = (GLint) (rgba[i][RCOMP] * scale + 0.5F);
GLint jG = (GLint) (rgba[i][GCOMP] * scale + 0.5F);
GLint jB = (GLint) (rgba[i][BCOMP] * scale + 0.5F);
GLint jA = (GLint) (rgba[i][ACOMP] * scale + 0.5F);
- rgba[i][RCOMP] = lut[jR * 4 + 0] * (1.0F / 255.0F);
- rgba[i][GCOMP] = lut[jG * 4 + 1] * (1.0F / 255.0F);
- rgba[i][BCOMP] = lut[jB * 4 + 2] * (1.0F / 255.0F);
- rgba[i][ACOMP] = lut[jA * 4 + 3] * (1.0F / 255.0F);
+ rgba[i][RCOMP] = CHAN_TO_FLOAT(lut[jR * 4 + 0]);
+ rgba[i][GCOMP] = CHAN_TO_FLOAT(lut[jG * 4 + 1]);
+ rgba[i][BCOMP] = CHAN_TO_FLOAT(lut[jB * 4 + 2]);
+ rgba[i][ACOMP] = CHAN_TO_FLOAT(lut[jA * 4 + 3]);
}
}
else {
@@ -966,9 +966,10 @@ _mesa_map_ci( const GLcontext *ctx, GLuint n, GLuint index[] )
* Map color indexes to rgba values.
*/
void
-_mesa_map_ci_to_rgba_ubyte( const GLcontext *ctx, GLuint n,
- const GLuint index[], GLubyte rgba[][4] )
+_mesa_map_ci_to_rgba_chan( const GLcontext *ctx, GLuint n,
+ const GLuint index[], GLchan rgba[][4] )
{
+#if CHAN_BITS == 8
GLuint rmask = ctx->Pixel.MapItoRsize - 1;
GLuint gmask = ctx->Pixel.MapItoGsize - 1;
GLuint bmask = ctx->Pixel.MapItoBsize - 1;
@@ -984,6 +985,23 @@ _mesa_map_ci_to_rgba_ubyte( const GLcontext *ctx, GLuint n,
rgba[i][BCOMP] = bMap[index[i] & bmask];
rgba[i][ACOMP] = aMap[index[i] & amask];
}
+#else
+ GLuint rmask = ctx->Pixel.MapItoRsize - 1;
+ GLuint gmask = ctx->Pixel.MapItoGsize - 1;
+ GLuint bmask = ctx->Pixel.MapItoBsize - 1;
+ GLuint amask = ctx->Pixel.MapItoAsize - 1;
+ const GLfloat *rMap = ctx->Pixel.MapItoR;
+ const GLfloat *gMap = ctx->Pixel.MapItoG;
+ const GLfloat *bMap = ctx->Pixel.MapItoB;
+ const GLfloat *aMap = ctx->Pixel.MapItoA;
+ GLuint i;
+ for (i=0;i<n;i++) {
+ rgba[i][RCOMP] = FLOAT_TO_CHAN(rMap[index[i] & rmask]);
+ rgba[i][GCOMP] = FLOAT_TO_CHAN(gMap[index[i] & gmask]);
+ rgba[i][BCOMP] = FLOAT_TO_CHAN(bMap[index[i] & bmask]);
+ rgba[i][ACOMP] = FLOAT_TO_CHAN(aMap[index[i] & amask]);
+ }
+#endif
}
@@ -1017,8 +1035,9 @@ _mesa_map_ci_to_rgba( const GLcontext *ctx, GLuint n,
*/
void
_mesa_map_ci8_to_rgba( const GLcontext *ctx, GLuint n, const GLubyte index[],
- GLubyte rgba[][4] )
+ GLchan rgba[][4] )
{
+#if CHAN_BITS == 8
GLuint rmask = ctx->Pixel.MapItoRsize - 1;
GLuint gmask = ctx->Pixel.MapItoGsize - 1;
GLuint bmask = ctx->Pixel.MapItoBsize - 1;
@@ -1034,6 +1053,23 @@ _mesa_map_ci8_to_rgba( const GLcontext *ctx, GLuint n, const GLubyte index[],
rgba[i][BCOMP] = bMap[index[i] & bmask];
rgba[i][ACOMP] = aMap[index[i] & amask];
}
+#else
+ GLuint rmask = ctx->Pixel.MapItoRsize - 1;
+ GLuint gmask = ctx->Pixel.MapItoGsize - 1;
+ GLuint bmask = ctx->Pixel.MapItoBsize - 1;
+ GLuint amask = ctx->Pixel.MapItoAsize - 1;
+ const GLfloat *rMap = ctx->Pixel.MapItoR8;
+ const GLfloat *gMap = ctx->Pixel.MapItoG8;
+ const GLfloat *bMap = ctx->Pixel.MapItoB8;
+ const GLfloat *aMap = ctx->Pixel.MapItoA8;
+ GLuint i;
+ for (i=0;i<n;i++) {
+ rgba[i][RCOMP] = FLOAT_TO_CHAN(rMap[index[i] & rmask]);
+ rgba[i][GCOMP] = FLOAT_TO_CHAN(gMap[index[i] & gmask]);
+ rgba[i][BCOMP] = FLOAT_TO_CHAN(bMap[index[i] & bmask]);
+ rgba[i][ACOMP] = FLOAT_TO_CHAN(aMap[index[i] & amask]);
+ }
+#endif
}