纹理完整性 Texture Completeness
一个纹理被称作是完整的,是指构成该纹理所需的所有纹理图像及其相关参数(如适用)已一致地定义好。对纹理执行的不同操作需要不同级别的完整性,其定义取决于纹理的维度和类型。
立方体贴图被认为是“立方体完整”(cube complete)的,条件如下:
- 构成立方体贴图的六个纹理图像的基础层级(levelbase)具有相同的正方形且相等的尺寸。
- 这些基础层级的图像均采用相同的有效内部格式进行指定。
立方体贴图数组被认为是“立方体贴图数组完整”(cube array complete)的,条件是数组内的每一层都是立方体完整的。
纹理被认为是“基础完整”(base complete)的,条件如下:
- 基础层级图像的所有尺寸均为正值。对于多重采样纹理,基础层级始终为零。
- 如果纹理是立方体贴图,则它必须是立方体完整的。
- 如果纹理是立方体贴图数组,则它必须是立方体贴图数组完整的。
纹理被认为是“.mipmap完整”(mipmap complete)的,条件如下:
- 它是基础完整的。
- 对于每一个基础层级图像,从levelbase到q(q在第8.14.3节中定义)的一系列mipmap图像均采用相同的有效内部格式进行指定。
- 各层级图像的尺寸遵循第8.14.3节中描述的序列。
- levelbase小于等于levelmax。
对于k<levelmax或k>q的图像层级k,并不影响mipmap完整性的定义。
除非满足以下任意条件,否则纹理被认为是完整的:
- 纹理不是基础完整的。
- 缩小过滤器需要mipmap(既不是NEAREST也不是LINEAR),纹理不是多重采样纹理,且纹理不是.mipmap完整的。
- 纹理不是多重采样纹理;或者,放大过滤器不是NEAREST,或者缩小过滤器既不是NEAREST也不是NEAREST_MIPMAP_NEAREST;同时满足以下任一条件:
- 纹理的内部格式为整数格式(参见表8.12)。
- 纹理的内部格式为DEPTH_STENCIL,且该纹理的DEPTH_STENCIL_TEXTURE_MODE值为STENCIL_INDEX。
- 内部格式为STENCIL_INDEX。
采样器对象对纹理完整性的影响 Effects of Sampler Objects on Texture Completeness
当采样器对象和纹理对象同时绑定到同一个纹理单元时,该单元的采样状态将从采样器对象中获取(参见第8.2节)。这可能会对纹理的有效完整性产生影响。特别是,如果纹理不是mipmap
完整,而采样器对象指定了要求使用mipmap
的TEXTURE_MIN_FILTER
,那么针对该纹理单元的目的,该纹理将被视为不完整。然而,如果采样器对象未要求使用mipmap
,那么纹理对象将被视为完整。
这意味着,如果纹理与具有不同状态的采样器对象绑定至两个或更多纹理单元,该纹理可以同时被认为既完整又不完整。
纹理应用中完整性的影响
在着色器中执行的纹理查找和纹理提取操作受到被采样纹理的完整性的影响,具体内容详见第11.1.3.5节和第15.2.1节。
完整性对纹理图像规范的影响 Effects of Completeness on Texture Image Specification
纹理图像的最大尺寸取决于实现的级别。具体来说,如果一个实现只允许创建级别为1或更高级别的纹理图像,那么只有在可以支持与请求的图像一致的默认TEXTURE_BASE_LEVEL
和TEXTURE_MAX_LEVEL
(参见表23.14)的完整的mipmap
图像集时,才能创建。因此,实现可能允许在级别为零时创建一个永远不会完整的mipmap
的纹理图像,并且只能与非mipmap
的最小化滤波器一起使用。