清理纹理图像数据 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 );
其中,texture
和 level
指示要清除的纹理图像。如果 texture
为零或不是纹理对象的名称,或者 texture
是缓冲区纹理,或者纹理图像具有压缩的内部格式,则出错。
参数 xoffset
、yoffset
和 zoffset
指定了纹理图像的下左后纹素坐标,用于确定要清除的矩形子区域的位置和大小。这些参数的解释与第 8.6 节中的 TexSubImage3D
相同。子区域必须位于纹理图像的边界内,如该节所述。
对于一维数组纹理,yoffset
被解释为要清除的第一个层,height
是要清除的层数。对于二维数组纹理,zoffset
被解释为要清除的第一个层,depth
是要清除的层数。立方体贴图纹理被视为 z
维度中的六个片段的数组,在Table 9.3
中,zoffset
的值被解释为指定相应层的立方体贴图面,并且 depth
是要清除的面的数量。对于立方体贴图数组纹理,zoffset
是要清除的第一个层面,depth
是要清除的层面数。每个层面被转换为一个数组层和一个立方体贴图面,如第 8.5.3 节中所述。
对于不具有某些维度的纹理类型,ClearTexSubImage
将这些维度视为大小为 1。例如,要清除二维纹理的一部分,使用 zoffset
等于零,depth
等于一。
format
和 type
指定源数据的格式和类型,并按照 TexImage3D
中描述的方式进行解释。具有深度组件、模板索引、深度/模板组件数据的基础内部格式的纹理需要相应的深度组件、模板或深度/模板组件数据。具有其他基础内部格式的纹理需要 RGBA 格式。具有整数内部格式的纹理(请参阅Table 8.12
)需要整数数据。
data
是指向 texel
数据的一个包含一到四个组件的数组的指针,将作为常量填充值的源。GL 将 data
的元素转换为纹理图像的内部格式(通过 TexImage
、TexStorage
或 CopyTexImage
命令中定义的级别),转换方式如第 8.4.4 节所述,然后用于填充目标纹理级别的指定范围。如果 data
为 NULL
,则指针将被忽略,并且纹理图像的子范围将填充为零。如果纹理是多重采样纹理,则一个 texel
中的所有样本都将清除为 data
指定的值。
纹理图像的全部填充为常量值:
void glClearTexImage( uint texture, int level, enum format, enum type, const void * data );
等同于调用 ClearTexSubImage
,其中 xoffset
、yoffset
和 zoffset
等于 0,而 width
、height
和 depth
等于纹理图像的尺寸(对于纹理没有的维度,尺寸为零和一)。