WebGL具有、、 和用于从着色器内部的纹理读取、GLSL、和。创建纹理时,我们指定纹理、和。根据OpenGL Sampler Wiki Page,对于给定纹理使用类型不兼容的采样器可能会导致未定义的值。 sampler2Disampler2Dusampler2Dfloatintunsigned intWebGL1/2InternalFormatFormatType
是否有一个简单的规则来确定如何将纹理的InternalFormat、Format和Type明确映射到正确的 GLSL 采样器类型?
(不失一般性,我重点关注了,?sampler2D 但当然也有 3D、立方体等纹理,我假设它们遵循完全相同的规则)
WebGL1 没有这些不同的采样器类型。
\n\nWebGL2的类型是由内部格式指定的。I以like结尾的类型RGB8I是isampler. UI以like结尾的类型RGB8UI是usampler格式。其他一切都是sampler
WebGL2 参考指南第 5 页上有格式列表
\n\n另请注意
\n\n(1) 您应该避免使用 WebGL2 的 OpenGL 参考页面,因为它们通常不匹配。相反,您应该阅读OpenGL ES 3.0.x 参考页
\n\n(2)WebGL2有更强的限制。您引用的文档表示这些值可以是未定义的。WebGL2 不允许这样做。来自WebGL2规范
\n\n\n\n5.22 采样器类型必须与内部纹理格式匹配
\n\n纹理查找函数返回浮点、无符号整数或有符号整数形式的值,具体取决于传递给查找函数的采样器类型。如果纹理访问使用了错误的采样器类型,即采样器类型与纹理内部格式不匹配,则返回值在 OpenGL ES Shading Language 3.00.6 中未定义(OpenGL ES Shading Language 3.00.6 \xc2\xa78.6)。 8). 在 WebGL 中,在相应的绘制调用中生成 INVALID_OPERATION 错误,包括drawArrays、drawElements、drawArraysInstanced、drawElementsInstanced 和drawRangeElements。
\n\n如果采样器类型为浮点型且内部纹理格式为归一化整数,则视为匹配,并将返回值转换为 [0, 1] 范围内的浮点型。
\n
| 归档时间: |
|
| 查看次数: |
2589 次 |
| 最近记录: |