0

网络GLGLSL公司2D采样器,示例2D、和美国示例2D用于阅读浮动,整数、和无符号整型从着色器内的纹理。在中创建纹理时WebGL1/2我们指定纹理内部格式,格式、和类型.根据OpenGL采样器Wiki页面,对给定纹理使用类型不兼容的采样器可能会导致未定义的值。

是否有一个简单的规则来确定如何映射纹理内部格式,格式、和类型确定为正确的GLSL采样器类型?

(在不失一般性的情况下,我专注于?2D采样器当然还有3D、立方体等纹理,我假设它们遵循完全相同的规则)

1个答案1

重置为默认值
6

WebGL1没有这些不同的采样器类型。

WebGL2类型由内部格式指定。以结尾的类型喜欢RGB8I型消除器。以结尾的类型用户界面喜欢RGB8用户界面usa采样器格式。其他一切都是取样器

WebGL2参考指南第5页上的格式列表

另请注意

(1) 您应该避免使用WebGL2的OpenGL参考页面,因为它们通常不匹配。相反,你应该阅读OpenGL(OpenGL)3.0.x参考页

(2) WebGL2有更强的限制。您引用的文档表示这些值可能未定义。WebGL2不允许这样做。发件人WebGL2规范

5.22采样器类型必须与内部纹理格式匹配

纹理查找函数根据传递给查找函数的采样器类型,将值返回为浮点、无符号整数或有符号整数。如果纹理访问使用了错误的采样类型,即采样类型与纹理内部格式不匹配,则返回的值在OpenGL ES Shading Language 3.00.6(OpenGL ES-Shading Lang.3.00.6§8.8)中未定义。在WebGL中,在相应的绘图调用中生成INVALID_OPERATION错误,包括drawArrays、drawElements、drawArrasInstanced、drawElementsInstanced和drawRangeElements。

如果采样器类型为浮点,内部纹理格式为标准化整数,则将其视为匹配,并将返回值转换为[0,1]范围内的浮点。

1
  • 谢谢——我之所以感到困惑,很大程度上是因为我认为isampler和usampler在webgl 1.0中可用,并试图弄清楚它在那种情况下是如何工作的。这里有一个小错误:“values are defined”应该是“values is undefined”,但SO不允许短于6个字符的编辑。。。
    – 利林因
    评论 2019年4月24日13:52

你的答案

单击“发布您的答案”,表示您同意我们的服务条款并确认您已阅读我们的隐私政策.

不是你想要的答案吗?浏览标记的其他问题问你自己的问题.