+
+void
+_mesa_GetColorTableParameteriv( GLenum target, GLenum pname, GLint *params )
+{
+ GET_CURRENT_CONTEXT(ctx);
+ struct gl_texture_unit *texUnit = &ctx->Texture.Unit[ctx->Texture.CurrentUnit];
+ struct gl_color_table *table = NULL;
+ ASSERT_OUTSIDE_BEGIN_END(ctx);
+
+ switch (target) {
+ case GL_TEXTURE_1D:
+ table = &texUnit->Current1D->Palette;
+ break;
+ case GL_TEXTURE_2D:
+ table = &texUnit->Current2D->Palette;
+ break;
+ case GL_TEXTURE_3D:
+ table = &texUnit->Current3D->Palette;
+ break;
+ case GL_PROXY_TEXTURE_1D:
+ table = &ctx->Texture.Proxy1D->Palette;
+ break;
+ case GL_PROXY_TEXTURE_2D:
+ table = &ctx->Texture.Proxy2D->Palette;
+ break;
+ case GL_PROXY_TEXTURE_3D:
+ table = &ctx->Texture.Proxy3D->Palette;
+ break;
+ case GL_SHARED_TEXTURE_PALETTE_EXT:
+ table = &ctx->Texture.Palette;
+ break;
+ case GL_COLOR_TABLE:
+ table = &ctx->ColorTable;
+ if (pname == GL_COLOR_TABLE_SCALE_SGI) {
+ params[0] = (GLint) ctx->Pixel.ColorTableScale[0];
+ params[1] = (GLint) ctx->Pixel.ColorTableScale[1];
+ params[2] = (GLint) ctx->Pixel.ColorTableScale[2];
+ params[3] = (GLint) ctx->Pixel.ColorTableScale[3];
+ return;
+ }
+ else if (pname == GL_COLOR_TABLE_BIAS_SGI) {
+ params[0] = (GLint) ctx->Pixel.ColorTableBias[0];
+ params[1] = (GLint) ctx->Pixel.ColorTableBias[1];
+ params[2] = (GLint) ctx->Pixel.ColorTableBias[2];
+ params[3] = (GLint) ctx->Pixel.ColorTableBias[3];
+ return;
+ }
+ break;
+ case GL_PROXY_COLOR_TABLE:
+ table = &ctx->ProxyColorTable;
+ break;
+ case GL_POST_CONVOLUTION_COLOR_TABLE:
+ table = &ctx->PostConvolutionColorTable;
+ if (pname == GL_COLOR_TABLE_SCALE_SGI) {
+ params[0] = (GLint) ctx->Pixel.PCCTscale[0];
+ params[1] = (GLint) ctx->Pixel.PCCTscale[1];
+ params[2] = (GLint) ctx->Pixel.PCCTscale[2];
+ params[3] = (GLint) ctx->Pixel.PCCTscale[3];
+ return;
+ }
+ else if (pname == GL_COLOR_TABLE_BIAS_SGI) {
+ params[0] = (GLint) ctx->Pixel.PCCTbias[0];
+ params[1] = (GLint) ctx->Pixel.PCCTbias[1];
+ params[2] = (GLint) ctx->Pixel.PCCTbias[2];
+ params[3] = (GLint) ctx->Pixel.PCCTbias[3];
+ return;
+ }
+ break;
+ case GL_PROXY_POST_CONVOLUTION_COLOR_TABLE:
+ table = &ctx->ProxyPostConvolutionColorTable;
+ break;
+ case GL_POST_COLOR_MATRIX_COLOR_TABLE:
+ table = &ctx->PostColorMatrixColorTable;
+ if (pname == GL_COLOR_TABLE_SCALE_SGI) {
+ params[0] = (GLint) ctx->Pixel.PCMCTscale[0];
+ params[1] = (GLint) ctx->Pixel.PCMCTscale[1];
+ params[2] = (GLint) ctx->Pixel.PCMCTscale[2];
+ params[3] = (GLint) ctx->Pixel.PCMCTscale[3];
+ return;
+ }
+ else if (pname == GL_COLOR_TABLE_BIAS_SGI) {
+ params[0] = (GLint) ctx->Pixel.PCMCTbias[0];
+ params[1] = (GLint) ctx->Pixel.PCMCTbias[1];
+ params[2] = (GLint) ctx->Pixel.PCMCTbias[2];
+ params[3] = (GLint) ctx->Pixel.PCMCTbias[3];
+ return;
+ }
+ break;
+ case GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE:
+ table = &ctx->ProxyPostColorMatrixColorTable;
+ break;
+ default:
+ _mesa_error(ctx, GL_INVALID_ENUM, "glGetColorTableParameteriv(target)");
+ return;
+ }
+
+ assert(table);
+
+ switch (pname) {
+ case GL_COLOR_TABLE_FORMAT:
+ *params = table->IntFormat;
+ break;
+ case GL_COLOR_TABLE_WIDTH:
+ *params = table->Size;
+ break;
+ case GL_COLOR_TABLE_RED_SIZE:
+ *params = table->RedSize;
+ break;
+ case GL_COLOR_TABLE_GREEN_SIZE:
+ *params = table->GreenSize;
+ break;
+ case GL_COLOR_TABLE_BLUE_SIZE:
+ *params = table->BlueSize;
+ break;
+ case GL_COLOR_TABLE_ALPHA_SIZE:
+ *params = table->AlphaSize;
+ break;
+ case GL_COLOR_TABLE_LUMINANCE_SIZE:
+ *params = table->LuminanceSize;
+ break;
+ case GL_COLOR_TABLE_INTENSITY_SIZE:
+ *params = table->IntensitySize;
+ break;
+ default:
+ _mesa_error(ctx, GL_INVALID_ENUM, "glGetColorTableParameteriv(pname)" );
+ return;
+ }
+}