textureQueryLod 呼び出しは、次の 2 つのコンポーネントを返します。
- x - 使用されるミップマップ レベルの比率を示します。
- y - 詳細レベル。
両方とも同じですか?
このような問題があり、GLSL 関数のクラスの基本的な API ドキュメントを調べても十分に答えられないことがわかった場合は、正式な GLSL 仕様を参照してください。
仕様、特にSection 8.9.1 - Texture Query Functionsを読むと、「使用される」ミップマップ レベルの非常に詳細な説明に出くわします。つまり、この値は、縮小 + ミップマップ フィルタリング中に最も近いミップマップ レベルを選択するために使用される分数コンポーネントです。
これで、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;
}
}
この疑似コードには 3 つの分岐があります。
によって返される 2 番目のコンポーネントtextureQueryLod (...)
は、クランプされていない整数の LOD です。