glTexSubImage1D 函数

glTexSubImage1D 函数指定现有一维纹理图像的一部分。 不能使用 glTexSubImage1D 定义新纹理。

语法

void WINAPI glTexSubImage1D(
         GLenum  target,
         GLint   level,
         GLint   xoffset,
         GLsizei width,
         GLenum  format,
         GLenum  type,
   const GLvoid  *pixels
);

参数

目标

目标纹理。 必须是GL_TEXTURE_1D。

level

详细级别编号。 级别 0 是基本映像。 级别 n第 n 个 mipmap 缩减图像。

xoffset

纹理数组中 x 方向的纹素偏移量。

width

纹理子图像的宽度。

format

像素数据的格式。 此参数可以假定以下符号值之一。

含义
GL_COLOR_INDEX
每个元素都是一个值,一个颜色索引。 它转换为固定点格式 (,二进制点右侧) 、向左或向右移动,具体取决于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 转换为 RGBA 元素。 然后,每个组件乘以有符号缩放因子GL_c_SCALE,添加到有符号偏差GL_c_BIAS,并固定到范围 [0,1] (看到 glPixelTransfer) 。
GL_GREEN
每个元素都是单个绿色组件。 它通过附加 0.0 表示红色和蓝色,将浮点格式转换为浮点格式,并将 1.0 转换为 RGBA 元素。 然后,每个组件乘以有符号缩放因子GL_c_SCALE,添加到有符号偏差GL_c_BIAS,并固定到范围 [0,1] (看到 glPixelTransfer) 。
GL_BLUE
每个元素都是一个蓝色组件。 它通过附加 0.0 表示红色和绿色,将它转换为浮点格式,并将 1.0 转换为 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 for 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 函数可以检索以下错误代码。

名称 含义
GL_INVALID_ENUM
目标 未GL_TEXTURE_1D。
GL_INVALID_ENUM
格式 不是接受的常量。
GL_INVALID_ENUM
type 不是接受的常量。
GL_INVALID_ENUM
类型 GL_BITMAP且 格式 未GL_COLOR_INDEX。
GL_INVALID_VALUE
级别 小于零或大于 log2 max,其中 max 是返回GL_MAX_TEXTURE_SIZE的值。
GL_INVALID_VALUE
xoffset 小于 b,或 offsetwidth + 大于 wb,其中 w 是GL_TEXTURE_WIDTH,b 是正在修改的纹理图像GL_TEXTURE_BORDER的宽度。
请注意, w 包含两倍的边框宽度。
GL_INVALID_VALUE
宽度 小于 b,其中 b 是纹理数组的边框宽度。
GL_INVALID_VALUE
边框 不是零或 1。
GL_INVALID_OPERATION
前一 个 glTexImage1D 操作未定义 texure 数组。
GL_INVALID_OPERATION
函数在 对 glBegin 的调用和 glEnd 的相应调用之间调用。

注解

使用 glEnableglDisable 和参数GL_TEXTURE_1D启用基元的一维文本。 在文本转换期间,指定纹理图像的一部分将映射到每个已启用的基元中。 使用 glTexSubImage1D 函数可指定现有一维纹理图像的连续子图像进行纹理着色。

像素引用的纹素将现有纹理数组的区域替换为 xoffset 和 xoffset + (宽度 1) (含)的 x 索引。 该区域不能包含原始指定的纹理数组范围之外的任何纹素。

指定 宽度 为零的子图像不起作用,并且不会生成错误。

着色在颜色索引模式下不起作用。

通常,纹理图像可以用 与 glDrawPixels 命令中的像素相同的数据格式来表示,但不能使用GL_STENCIL_INDEX和GL_DEPTH_COMPONENT。 glPixelStoreglPixelTransfer 模式以影响 glDrawPixels 的方式影响纹理图像。

以下函数检索与 glTexSubImage1D 相关的信息:

glGetTexImage

带参数GL_TEXTURE_1D的 glIsEnabled

要求

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

Opengl32.lib
DLL
Opengl32.dll

另请参阅

glCopyTexImage1D

glCopyTexImage2D

glCopyTexSubImage1D

glCopyTexSubImage2D

glDrawPixels

glEnable

glFog

glGetTexImage

glIsEnabled

glPixelStore

glPixelTransfer

glTexEnv

glTexGen

glTexImage1D

glTexImage2D

glTexParameter

glTexSubImage2D