多重采样纹理 Multisample Textures
除了前几节中描述的纹理类型外,还支持两种额外的纹理类型。多重采样纹理类似于二维或二维数组纹理,不同之处在于每个纹理元素(texel)包含多个样本。多重采样纹理没有多个图像层次(multiple image levels)。
以下命令:
void glTexImage2DMultisample( enum target, sizei samples, enum internalformat, sizei width, sizei height, boolean fixedsamplelocations );
void glTexImage3DMultisample( enum target, sizei samples, enum internalformat, sizei width, sizei height, sizei depth, boolean fixedsamplelocations );
用于建立多重采样纹理图像的数据存储、格式、尺寸以及样本数量。对于TexImage2DMultisample
,target
必须是TEXTURE_2D_MULTISAMPLE
或 PROXY_TEXTURE_2D_MULTISAMPLE
;而对于TexImage3DMultisample
,target
必须是TEXTURE_2D_MULTISAMPLE_ARRAY
或 PROXY_TEXTURE_2D_MULTISAMPLE_ARRAY
。width
和height
表示纹理的像素维度。
samples
参数代表请求的最小样本数。由于不同的实现可能对多重采样纹理支持不同的样本计数,因此实际分配给纹理图像的样本数量依赖于具体实现。然而,结果中TEXTURE_SAMPLES
的值保证大于等于samples
,并且不超过实现所支持的下一个较大样本计数。
如果fixedsamplelocations
为TRUE
,则图像将在所有纹理元素中使用相同的样本位置和相同数量的样本,并且样本位置不会依赖于图像的内部格式或大小。
成功调用TexImage*Multisample
时,会删除目标现有的任何图像,纹理内容未定义。相应地,TEXTURE_WIDTH
、TEXTURE_HEIGHT
、TEXTURE_SAMPLES
、TEXTURE_INTERNAL_FORMAT
和 TEXTURE_FIXED_SAMPLE_LOCATIONS
将分别设置为width
、height
、实际分配的样本数、internalformat
和fixedsamplelocations
。
当在着色器中访问多重采样纹理时,访问需要一个整数向量来描述要获取哪个纹理元素,以及一个对应于第14.3.1节所述样本编号的整数,以确定从该纹理元素中获取哪个样本。不允许在多重采样纹理目标上使用标准采样指令,并且由fetch操作执行时不进行过滤处理。尝试获取小于零或大于等于纹理中样本总数的样本号会导致未定义的结果。