8.21 OpenGL纹理和采样器:清理纹理图像数据

本文介绍了如何在OpenGL中使用glClearTexSubImage和glClearTexImage函数清除纹理图像的全部或部分,包括参数解释、纹理类型和数据格式要求。这两个函数的区别在于glClearTexImage自动处理全尺寸纹理区域的清除。
摘要由CSDN通过智能技术生成

清理纹理图像数据 Clearing Texture Image Data

纹理图像的全部或部分可以使用以下命令填充为常量值:

void glClearTexSubImage( uint texture, int level, int xoffset, int yoffset, int zoffset, sizei width, sizei height, sizei depth, enum format, enum type, const void *data );

其中,texturelevel 指示要清除的纹理图像。如果 texture 为零或不是纹理对象的名称,或者 texture 是缓冲区纹理,或者纹理图像具有压缩的内部格式,则出错。

参数 xoffsetyoffsetzoffset 指定了纹理图像的下左后纹素坐标,用于确定要清除的矩形子区域的位置和大小。这些参数的解释与第 8.6 节中的 TexSubImage3D 相同。子区域必须位于纹理图像的边界内,如该节所述。

对于一维数组纹理,yoffset 被解释为要清除的第一个层,height 是要清除的层数。对于二维数组纹理,zoffset 被解释为要清除的第一个层,depth 是要清除的层数。立方体贴图纹理被视为 z 维度中的六个片段的数组,在Table 9.3 中,zoffset 的值被解释为指定相应层的立方体贴图面,并且 depth 是要清除的面的数量。对于立方体贴图数组纹理,zoffset 是要清除的第一个层面,depth 是要清除的层面数。每个层面被转换为一个数组层和一个立方体贴图面,如第 8.5.3 节中所述。

对于不具有某些维度的纹理类型,ClearTexSubImage 将这些维度视为大小为 1。例如,要清除二维纹理的一部分,使用 zoffset 等于零,depth 等于一。

formattype 指定源数据的格式和类型,并按照 TexImage3D 中描述的方式进行解释。具有深度组件、模板索引、深度/模板组件数据的基础内部格式的纹理需要相应的深度组件、模板或深度/模板组件数据。具有其他基础内部格式的纹理需要 RGBA 格式。具有整数内部格式的纹理(请参阅Table 8.12)需要整数数据。

data 是指向 texel 数据的一个包含一到四个组件的数组的指针,将作为常量填充值的源。GL 将 data 的元素转换为纹理图像的内部格式(通过 TexImageTexStorageCopyTexImage 命令中定义的级别),转换方式如第 8.4.4 节所述,然后用于填充目标纹理级别的指定范围。如果 dataNULL,则指针将被忽略,并且纹理图像的子范围将填充为零。如果纹理是多重采样纹理,则一个 texel 中的所有样本都将清除为 data 指定的值。


纹理图像的全部填充为常量值:

void glClearTexImage( uint texture, int level, enum format, enum type, const void * data );

等同于调用 ClearTexSubImage,其中 xoffsetyoffsetzoffset 等于 0,而 widthheightdepth 等于纹理图像的尺寸(对于纹理没有的维度,尺寸为零和一)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值