我正致力于在WebGL中实现片段着色器,并且遇到了只能在for循环中使用常量表达式的限制。有没有人为此做过任何合适的解决方法?
在我的具体情况下,我实现了双边过滤器,目前在我的片段着色器中有一个窗口大小指定为const,但是希望能够从JavaScript更改它。制服不被认为是常量,因此无法在for循环中使用,所以我正在寻找其他实现方法。
我唯一能想到的是从JavaScript读取着色器源,解析它并用所需的窗口大小替换const的值,然后重新编译着色器。这可以达到我的目的,但我想知道是否有更简单的方法。
答案 0 :(得分:8)
如果您希望/需要能够动态更改循环长度,则可以使用for
循环计数到非常大的数字/无穷大,并在达到限制后使用break
:
uniform int loopLimit;
for (int i = 0; i < 10000; i++) {
if (i == loopLimit) break;
// Do your stuff
}