interpolateAtOffset()的偏移参数范围

时间:2020-05-27 11:16:46

标签: opengl opengl-es glsl vulkan glsles

GLSL 4.6和GLSL ES 3.2规范都说:

此函数[interpolateAtOffset]支持的偏移量的范围和粒度取决于实现。

这似乎太开放了,无法使用。我应该如何知道哪些将在多个供应商中真正起作用?标准中是否至少指定了最小支持范围?如果没有,我可以依靠的主要供应商是否支持某些事实?

1 个答案:

答案 0 :(得分:2)

对于Vulkan,the 1.2 specification要求使用minInterpolationOffsetmaxInterpolationOffsetsubPixelInterpolationOffsetBits报告范围和粒度,其中:

minInterpolationOffsetmaxInterpolationOffset描述了支持的插值偏移的闭合间隔:[minInterpolationOffsetmaxInterpolationOffset]。 ULP由subPixelInterpolationOffsetBits确定。如果subPixelInterpolationOffsetBits为4,则增量为(1/24)= 0.0625,因此支持的插值偏移范围为[-0.5,0.4375]。

基于规范要求的最小值,如果支持sampleRateShading,则可以至少依赖[-0.5,0.4375]。

对于OpenGL,the 4.6 specification说:

内置函数interpolateAtOffset将以相对于像素中心的指定( x y )偏移量对变量进行采样。此功能支持的偏移量的范围和粒度取决于实现。如果指定偏移量的任一分量小于MIN_FRAGMENT_INTERPOLATION_OFFSET的值或大于MAX_FRAGMENT_INTERPOLATION_OFFSET的值,则用于插值变量的位置不确定。并非所有的offset值都受支持;可以使用与实现相关的常量FRAGMENT_INTERPOLATION_OFFSET_BITS的值给出的分数位数将x和y偏移量舍入为定点值。

所需的最小值与Vulkan相同。

尝试通过PDF搜索很痛苦,因此我不会理会ES规范,我认为它是相同的。

相关问题