glTexSubImage2D 函数
glTexSubImage2D 函数指定现有一维纹理图像的一部分。 不能使用 glTexSubImage2D 定义新纹理。
语法
void WINAPI glTexSubImage2D(
GLenum target,
GLint level,
GLint xoffset,
GLint yoffset,
GLsizei width,
GLsizei height,
GLenum format,
GLenum type,
const GLvoid *pixels
);
参数
-
目标
-
目标纹理。 必须为 GL_TEXTURE_2D。
-
level
-
细节级别编号。 级别 0 是基础图像。 级别 n 是第 n 个 mipmap 缩减图像。
-
xoffset
-
纹理数组中 x 方向的纹素偏移量。
-
yoffset
-
纹理数组中 y 方向的纹素偏移量。
-
width
-
纹理子图像的宽度。
-
height
-
纹理子图像的高度。
-
format
-
像素数据的格式。 它可以假定以下符号值之一。
值 含义 - GL_COLOR_INDEX
每个元素都是一个单独的值,即一个颜色索引。 它将转换为固定点格式(二进制点右侧有未指定的 0 位数字),根据 GL_INDEX_SHIFT 的值和符号向左或向右移动,并添加到 GL_INDEX_OFFSET(请参阅 glPixelTransfer)。 生成的索引使用 GL_PIXEL_MAP_I_TO_R、GL_PIXEL_MAP_I_TO_G、GL_PIXEL_MAP_I_TO_B 和 GL_PIXEL_MAP_I_TO_A 表转换为一组颜色分量,并限定在范围 [0,1] 内。 - GL_RED
每个元素都是单个红色分量。 它通过附加 0.0 表示绿色和蓝色,以及 1.0 表示 alpha,将其转换为浮点格式并组合为 RGBA 元素。 然后,每个分量乘以有符号比例因子 GL_c_SCALE,添加到有符号偏差 GL_c_BIAS,并限定在范围 [0,1] 内(请参阅 glPixelTransfer)。 - GL_GREEN
每个元素都是单个绿色分量。 它通过附加 0.0 表示红色和蓝色,以及 1.0 表示 alpha,将其转换为浮点格式并组合为 RGBA 元素。 然后,每个分量乘以有符号比例因子 GL_c_SCALE,添加到有符号偏差 GL_c_BIAS,并限定在范围 [0,1] 内(请参阅 glPixelTransfer)。 - GL_BLUE
每个元素都是单个蓝色分量。 它通过附加 0.0 表示红色和绿色,以及 1.0 表示 alpha,将其转换为浮点格式并组合为 RGBA 元素。 然后,每个分量乘以有符号比例因子 GL_c_SCALE,添加到有符号偏差 GL_c_BIAS,并限定在范围 [0,1] 内(请参阅 glPixelTransfer)。 - GL_ALPHA
每个元素都是单个 alpha 分量。 它通过附加 0.0 表示红色、绿色和蓝色,转换为浮点格式并组合为 RGBA 元素。 然后,每个分量乘以有符号比例因子 GL_c_SCALE,添加到有符号偏差 GL_c_BIAS,并限定在范围 [0,1] 内(请参阅 glPixelTransfer)。 - GL_RGB
每个元素都是 RGB 三元组。 它通过附加 1.0 表示 alpha 来转换为浮点格式并组合为 RGBA 元素。 然后,每个分量乘以有符号比例因子 GL_c_SCALE,添加到有符号偏差 GL_c_BIAS,并限定在范围 [0,1] 内(请参阅 glPixelTransfer)。 - GL_RGBA
每个元素都是完整的 RGBA 元素。 它转换为浮点。 然后,每个分量乘以有符号比例因子 GL_c_SCALE,添加到有符号偏差 GL_c_BIAS,并限定在范围 [0,1] 内(请参阅 glPixelTransfer)。 - GL_LUMINANCE
每个元素都是单个亮度值。 它通过复制亮度值三次表示红色、绿色和蓝色,并附加 1.0 表示 alpha,转换为浮点格式并将其组合成 RGBA 元素。 然后,每个分量乘以有符号比例因子 GL_c_SCALE,添加到有符号偏差 GL_c_BIAS,并限定在范围 [0,1] 内(请参阅 glPixelTransfer)。 - GL_LUMINANCE_ALPHA
每个元素都是亮度/alpha 对。 它通过复制亮度值三次表示红色、绿色和蓝色,转换为浮点格式并将其组合成 RGBA 元素。 然后,每个分量乘以有符号比例因子 GL_c_SCALE,添加到有符号偏差 GL_c_BIAS,并限定在范围 [0,1] 内(请参阅 glPixelTransfer)。 -
type
-
像素数据的数据类型。 接受以下符号值:GL_UNSIGNED_BYTE、GL_BYTE、GL_BITMAP、GL_UNSIGNED_SHORT、GL_SHORT、GL_UNSIGNED_INT、GL_INT 和 GL_FLOAT。
-
像素
-
指向内存中图像数据的指针。
返回值
此函数不返回值。
错误代码
glGetError 函数可以检索以下错误代码。
名称 | 含义 |
---|---|
|
target 不是 GL_TEXTURE_2D。 |
|
format 不是接受的常量。 |
|
type 不是接受的常量。 |
|
type 为 GL_BITMAP,format 不是 GL_COLOR_INDEX。 |
|
level 小于零或大于 log2 max,其中 max 是返回的 GL_MAX_TEXTURE_SIZE 值。 |
|
xoffset 小于 -b;或 xoffset + width 大于 w - b;或 yoffset 小于 -b;或 yoffset + height 大于 h - b,其中 w 为 GL_TEXTURE_WIDTH,h 为 GL_TEXTURE_HEIGHT,并且 b 是正在修改的纹理图像的 GL_TEXTURE_ORDER 宽度。 请注意,w 和 h 包含两倍的边框宽度。 |
|
width 小于 b,其中 b 是纹理数组的边框宽度。 |
|
border 不为零或 1。 |
|
前一个 glTexImage2D 操作未定义纹理数组。 |
|
在 glBegin 的调用和 glEnd 的相应调用之间调用该函数。 |
备注
可使用 glEnable 和 glDisable 以及自变量 GL_TEXTURE_2D 来启用基元的二维纹理。 在纹理处理期间,指定纹理图像的一部分将映射到每个已启用的基元中。 可以使用 glTexSubImage2D 函数指定现有二维纹理图像的连续子图像进行纹理处理。
像素引用的纹素将现有纹理数组的区域替换为 x 索引(包括 xoffset 和 xoffset + (width 1))和 y 索引(包括 yoffset 和 yoffset + (height 1))。 此区域不能包含最初指定的纹理数组范围之外的任何纹素。
指定 width 为零的子图像不起作用,并且不会生成错误。
纹理在颜色索引模式下不起作用。
通常,纹理图像可以用与 glDrawPixels 命令中的像素相同的数据格式表示,但不能使用 GL_STENCIL_INDEX 和 GL_DEPTH_COMPONENT。 glPixelStore 和 glPixelTransfer 模式按照它们影响 glDrawPixels 的方式影响纹理图像。
以下函数检索与 glTexSubImage2D 相关的信息:
自变量为 GL_TEXTURE_2D 的 glIsEnabled
要求
要求 | 值 |
---|---|
最低受支持的客户端 |
Windows 2000 Professional [仅限桌面应用] |
最低受支持的服务器 |
Windows 2000 Server [仅限桌面应用] |
Header |
|
库 |
|
DLL |
|