GLSL 4.6和GLSL ES 3.2规范都说:
此函数[interpolateAtOffset]支持的偏移量的范围和粒度取决于实现。
这似乎太开放了,无法使用。我应该如何知道哪些将在多个供应商中真正起作用?标准中是否至少指定了最小支持范围?如果没有,我可以依靠的主要供应商是否支持某些事实?
答案 0 :(得分:2)
对于Vulkan,the 1.2 specification要求使用minInterpolationOffset
,maxInterpolationOffset
和subPixelInterpolationOffsetBits
报告范围和粒度,其中:
值
minInterpolationOffset
和maxInterpolationOffset
描述了支持的插值偏移的闭合间隔:[minInterpolationOffset
,maxInterpolationOffset
]。 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规范,我认为它是相同的。