如何解决 webgl 着色器中的循环错误

用户8923665

当我为 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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章