textureQueryLod 调用返回两个组件:
- x - 说明使用的 mipmap 级别的比例。
- y - 详细程度。
他们都一样吗?
当您遇到此类问题并发现通过查看一类 GLSL 函数的基本 API 文档无法充分回答时,您应该查阅正式的 GLSL 规范。
如果您阅读规范,特别是第 8.9.1 节 - 纹理查询函数,您会遇到对“已使用”mipmap 级别的非常详细的说明。简而言之,该值是在缩小+mipmap 过滤期间用于选择最近的 mipmap 级别的小数部分。
有了这些,您应该有理论基础来理解第 155 页规范中提供的伪代码:
float ComputeAccessedLod(float computedLod)
{
// Clamp the computed LOD according to the texture LOD clamps.
if (computedLod < TEXTURE_MIN_LOD) computedLod = TEXTURE_MIN_LOD;
if (computedLod > TEXTURE_MAX_LOD) computedLod = TEXTURE_MAX_LOD;
// Clamp the computed LOD to the range of accessible levels.
if (computedLod < 0.0)
computedLod = 0.0;
if (computedLod > (float)
maxAccessibleLevel) computedLod = (float) maxAccessibleLevel;
// Return a value according to the min filter.
if (TEXTURE_MIN_FILTER is LINEAR or NEAREST) {
return 0.0;
} else if (TEXTURE_MIN_FILTER is NEAREST_MIPMAP_NEAREST
or LINEAR_MIPMAP_NEAREST) {
return ceil(computedLod + 0.5) - 1.0;
} else {
return computedLod;
}
}
这段伪代码有三个分支:
返回的第二个分量textureQueryLod (...)
是未钳位的整数 LOD。