在 WebGL 循环中使用制服(或类似)的解决方法?

Workaround to use uniforms (or similar) in WebGL for loops?

我正致力于在 WebGL 中实现片段着色器,遇到了只能在 for 循环中使用常量表达式的限制。有人对此有任何合适的解决方法吗?

在我的具体情况下,我正在实施双边过滤器,目前在我的片段着色器中将 window 大小指定为常量,但希望能够将其从 [=16] 更改为=].制服不被视为常量,因此不能在 for 循环中使用,因此我正在寻找其他实现方法。

我唯一能想到的就是从 JavaScript 中读取着色器源代码,对其进行解析并将 const 的值替换为所需的 window 大小,然后重新编译着色器。这对我的目的有用,但我想知道是否有更简单的方法。

如果您 want/need 能够动态更改循环长度,您可以使用 for 循环计数到非常大的数字/无穷大,并且一旦达到限制 break

uniform int loopLimit;

for (int i = 0; i < 10000; i++) {
  if (i == loopLimit) break;
  // Do your stuff
}