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

TJ *_*tts 1 javascript shader webgl glsles

我正在努力在WebGL中实现片段着色器,并且遇到了只能在for循环中使用常量表达式的限制.有没有人有这方面的合适的解决方法?

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

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

LJᛃ*_*LJᛃ 8

如果你想/需要能够动态改变你的循环长度,你可以使用一个for循环计数到一个非常大的数字/无穷大,break一旦达到你的限制:

uniform int loopLimit;

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