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