当我为 for 循环传入一个统一的 int 变量时,它会报告错误
当我定义一个常量时,它不会报错,
如何解决
// error INVALID_OPERATION
uniform int myLen;
for (int i = 0; i < myLen; i += 1)
// success
const int myNum = 10;
for (int i = 0; i < myNum; i += 1)
我猜你的目标是 WebGL 1。
如果我们查看The OpenGL® ES Shading Language, version 1.00的规范,这是 WebGL 使用的,并查看“附录 A:ES 2.0 的限制”部分(OpenGL ES 2.0 是 WebGL 1 的基础),它说:
通常,控制流仅限于前向分支和循环,其中最大迭代次数可以在编译时轻松确定。
[…]
支持for循环,但有以下限制:
[…]
- for 语句的形式为:
for ( init-declaration ; condition ; expression )语句[…]
- 条件的形式
为 loop_index 关系运算符 常量
表达式,其中关系运算符是以下之一: > >= < <= == 或 !=
注意“常量表达式”。不幸的是,这意味着您不允许*像您所做的那样对循环绑定使用统一变量。
我相信这在 WebGL 2 中有所不同。如果可以选择,您可能想尝试使用它。
* GLSL ES 规范确实说“在 GLSL ES 规范中,允许实现实现超出本节所述最小值的功能,而无需使用扩展。” 然而,不幸的是,WebGL 的规范禁止这样做:
WebGL 实现必须只接受符合 OpenGL ES 着色语言,版本 1.00 [GLES20GLSL] 并且不超过附录 A 第 4 和第 5 节规定的最低功能的着色器
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句