glColorTableEXT 函数

glColorTableEXT 函数指定目标调色板纹理的格式和大小。

语法

void WINAPI glColorTableEXT(
         GLenum  target,
         GLenum  internalFormat,
         GLsizei width,
         GLenum  format,
         GLenum  type,
   const GLvoid  *data
);

parameters

目标

要更改其调色板的目标纹理。 必须是TEXTURE_1D、TEXTURE_2D、PROXY_TEXTURE_1D或PROXY_TEXTURE_2D。

internalFormat

调色板的内部格式和分辨率。 此参数可以假定以下符号值之一。

常数 基本格式 R 位 G 位 B 位 A Bits
GL_R3_G3_B2 GL_RGB 3 3 2
GL_RGB4 GL_RGB 4 4 4
GL_RGB5 GL_RGB 5 5 5
GL_RGB8 GL_RGB 8 8 8
GL_RGB10 GL_RGB 10 10 10
GL_RGB12 GL_RGB 12 12 12
GL_RGB16 GL_RGB 16 16 16
GL_RGBA2 GL_RGBA 2 2 2 2
GL_RGBA4 GL_RGBA 4 4 4 4
GL_RGB5_A1 GL_RGBA 5 5 5 1
GL_RGBA8 GL_RGBA 8 8 8 8
GL_RG10_A2 GL_RGBA 10 10 10 2
GL_RGB12 GL_RGBA 12 12 12 12
GL_RGBA16 GL_RGBA 16 16 16 16

width

调色板的大小。 对于某个整数 n,必须为 2n = 1。

format

像素数据的格式。 接受以下符号常量。

含义
GL_RGBA
每个像素是按以下顺序由四个分量构成的一组:红色、绿色、蓝色、alpha。 按以下方式确定 RGBA 格式:
  1. glColorTableEXT 函数将浮点值直接转换为具有未指定精度的内部格式。 带符号整数值线性映射到内部格式,以便最正的可表示整数值映射到 1.0,而最负的可表示整数值映射到 -1.0。 无符号整数数据的映射方式类似:最大整数值映射到 1.0,零映射到 0.0。
  2. glColorTableEXT 函数将生成的颜色值乘以GL_c_SCALE,并将其添加到GL_c_BIAS,其中 c 是红色、绿色、蓝色和 ALPHA,表示相应的颜色分量。 结果被限制在 [0,1] 范围内。
  3. 如果GL_MAP_COLOR为 TRUE则 glColorTableEXT 按查阅表格GL_PIXEL_MAP_c_TO_c的大小缩放每个颜色分量,然后将该组件替换为该表中引用的值; c 分别为 R、G、B 或 A。
  4. glColorTableEXT 函数通过将当前光栅位置 z 坐标和纹理坐标附加到每个像素,然后将 xy 窗口坐标分配给第 n个片段,使x? = xr + n mod width
    Y? = yr +n / width
    其中, (xryr ) 是当前光栅位置。
  5. 然后,这些像素片段的处理方式与光栅化点、线或多边形生成的片段一样。 glColorTableEXT 函数在将片段写入 framebuffer 之前应用纹理映射、迷雾和所有片段操作。
GL_RED
每个像素都是单个红色分量。
glColorTableEXT 函数将此分量转换为内部格式,其方式与 RGBA 像素的红色分量相同,然后将其转换为 RGBA 像素,将绿色和蓝色设置为 0.0,alpha 设置为 1.0。 此转换后,将像将其读取为 RGBA 像素一样处理像素。
GL_GREEN
每个像素都是单个绿色分量。
glColorTableEXT 函数将此组件转换为内部格式,其方式与 RGBA 像素的绿色分量相同,然后将其转换为 RGBA 像素,其中红色和蓝色设置为 0.0,alpha 设置为 1.0。 此转换后,将像将其读取为 RGBA 像素一样处理像素。
GL_BLUE
每个像素都是一个蓝色分量。
glColorTableEXT 函数将此组件转换为内部格式,其方式与 RGBA 像素的蓝色分量相同,然后将其转换为 RGBA 像素,其中红色和绿色设置为 0.0,alpha 设置为 1.0。 此转换后,将像将其读取为 RGBA 像素一样处理像素。
GL_ALPHA
每个像素都是一个 alpha 分量。
glColorTableEXT 函数将此组件转换为内部格式,其方式与 RGBA 像素的 alpha 分量相同,然后将其转换为将红色、绿色和蓝色设置为 0.0 的 RGBA 像素。 此转换后,将像将其读取为 RGBA 像素一样处理像素。
GL_RGB
每个像素都是一组三个分量,按以下顺序排列:红色、绿色、蓝色。
glColorTableEXT 函数将每个分量转换为内部格式,其方式与 RGBA 像素的红色、绿色和蓝色分量相同。 颜色三重转换为 alpha 设置为 1.0 的 RGBA 像素。 此转换后,将像将其读取为 RGBA 像素一样处理像素。
GL_BGR_EXT
每个像素是一组三个分量,按以下顺序排列:蓝色、绿色、红色。
GL_BGR_EXT提供的格式与 windows 设备无关位图 (DDB) 的内存布局相匹配。 因此,应用程序可以通过 Windows 函数调用和 OpenGL 像素函数调用使用相同的数据。
GL_BGRA_EXT
每个像素都是一组四个分量,按以下顺序排列:蓝色、绿色、红色、alpha。
GL_BGRA_EXT提供的格式与与 windows 设备无关的位图 (DDB) 的内存布局相匹配。 因此,应用程序可以通过 Windows 函数调用和 OpenGL 像素函数调用使用相同的数据。

type

数据的数据类型。 接受以下符号常量:GL_UNSIGNED_BYTE、GL_BYTE、GL_UNSIGNED_SHORT、GL_SHORT、GL_UNSIGNED_INT、GL_INT 和 GL_FLOAT。

下表总结了 类型 参数的有效常量的含义。

含义
GL_UNSIGNED_BYTE
无符号的 8 位整数
GL_BYTE
8 位带符号整数
GL_UNSIGNED_SHORT
无符号 16 位整数
GL_SHORT
有符号 16 位整数
GL_UNSIGNED_INT
无符号的 32 位整数
GL_INT
32-bit integer
GL_FLOAT
单精度浮点值

data

指向调色板纹理数据的指针。 数据被视为调色板条目的一维纹理调色板项的单个像素。

返回值

此函数不返回值。

错误代码

glGetError 函数可以检索以下错误代码。

名称 含义
GL_INVALID_VALUE
width 是无效整数。
GL_INVALID_ENUM
targetinternalFormatformattype 不是接受的值。
GL_INVALID_OPERATION
函数是在 对 glBegin 的调用和对 glEnd 的相应调用之间调用的。

备注

调色板纹理由调色板和一组图像数据定义,这些数据由调色板的颜色条目索引组成, (颜色表) 。

glColorTableEXT 函数指定目标纹理的纹理调色板。 它从内存中获取 数据 并转换数据,就好像每个调色板条目都是一维纹理的单个像素一样。 glColorTableEXT 函数解包并转换数据,并将其转换为尽可能与给定格式匹配的内部格式

如果调色板的 宽度 大于纹理数据中颜色索引的范围,则某些调色板条目未使用。 如果调色板的 宽度 小于纹理数据中颜色索引的范围,则忽略纹理数据的最有效位,并在访问调色板时仅使用索引中适当的位数。 使用 PROXY_TEXTURE_1D 或 PROXY_TEXTURE_2D 指定代理 目标 时,将调整代理纹理的调色板的大小并设置其参数,但不会传输或访问任何数据。

目标 参数GL_PROXY_TEXTURE_1D或GL_PROXY_TEXTURE_2D,并且实现不支持为 格式宽度指定的值时, glColorTableEXT 可能无法创建请求的颜色表。 在这种情况下,颜色表为空,并且检索到的所有参数将为零。 可以通过使用代理目标调用 glColorTableEXT,然后调用 glGetColorTableParameterivEXT 或 glGetColorTableParameterfvEXT 来确定 width 参数是否与 glColorTableEXT 设置的宽度参数匹配,从而确定是否支持特定的颜色表格式和大小。 如果检索到的宽度为零, 则 glColorTable 的颜色表请求失败。 如果检索到的宽度不为零,则可以使用TEXTURE_1D或TEXTURE_2D来调用具有真实目标的 glColorTable 来设置颜色表。

注意

glColorTableEXT 函数是一个扩展函数,它不属于标准 OpenGL 库,而是GL_EXT_paletted_texture扩展的一部分。 若要检查 OpenGL 的实现是否支持 glColorTableEXT,请调用 glGetString (GL_EXTENSIONS) 。 如果返回GL_EXT_paletted_texture,则支持 glColorTableEXT 。 若要获取扩展函数的函数地址,请调用 wglGetProcAddress

若要检索 glColorTableEXT 函数指定的实际颜色表数据,请调用 glGetColorTableEXT。 若要检索 glColorTableEXT 函数指定的颜色表的参数(如宽度格式),请调用 glGetColorTableParameterivEXTglGetColorTableParameterfvEXT 函数。

要求

要求
最低受支持的客户端
Windows 2000 Professional [仅限桌面应用]
最低受支持的服务器
Windows 2000 Server [仅限桌面应用]
标头
Gl.h

另请参阅

glBegin

glColorSubTableEXT

glEnd

glGetColorTableEXT

glGetColorTableParameterfvEXT

glGetColorTableParameterivEXT

wglGetProcAddress