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

时间:2015-09-11 17:38:17

标签: javascript webgl shader glsles

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

在我的具体情况下,我实现了双边过滤器,目前在我的片段着色器中有一个窗口大小指定为const,但是希望能够从JavaScript更改它。制服不被认为是常量,因此无法在for循环中使用,所以我正在寻找其他实现方法。

我唯一能想到的是从JavaScript读取着色器源,解析它并用所需的窗口大小替换const的值,然后重新编译着色器。这可以达到我的目的,但我想知道是否有更简单的方法。

1 个答案:

答案 0 :(得分:8)

如果您希望/需要能够动态更改循环长度,则可以使用for循环计数到非常大的数字/无穷大,并在达到限制后使用break

uniform int loopLimit;

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