2011-06-06 51 views

回答

11

http://www.khronos.org/registry/webgl/specs/latest/#DYNAMIC_INDEXING_OF_ARRAYS “WebGL只允许使用常量表达式,循环索引或组合的动态索引,唯一的例外是顶点着色器中的统一访问,它可以使用任何表达式进行索引。

你试过了吗?如果它不起作用,有几个选项。

如果您有少量值,if-else可以正常工作。 AFAIK统一值将被加载到寄存器无论如何,因此做十几个数学循环他们不会让你的着色速度慢得多。

对于大量的值,纹理是你最好的选择。

+10

有任何编译错误是一种变通方法:'/ *赋予变量i索引* /对(INT X = 0; x 2013-02-19 09:20:02

-1

我没有测试过,但我没有得到从以下

//index as a float 
attribute lowp float vColorIndex; 
//the array 
uniform vec4 Colors[16]; 

//type cast the float in an int 
int index = int(vColorIndex); 
//use index 
vec4 col = Colors[index]; 
+0

运行时失败。 – jes5199 2017-02-10 05:56:20