正如标题所说,我不能在webgl顶点着色器中vector_array[foo]
(假设foo是范围内和整数),对吗?
纹理是最好的替代方案,还是有解决方法或更好的方法来模仿查找表?
答案 0 :(得分:11)
http://www.khronos.org/registry/webgl/specs/latest/#DYNAMIC_INDEXING_OF_ARRAYS “WebGL只允许使用常量表达式,循环索引或组合进行动态索引。唯一的例外是顶点着色器中的统一访问,可以使用任何表达式对其进行索引。”
你尝试过吗?如果它不起作用,有几个选项。如果你有少量的值,if-else可以正常工作。无论如何,AFAIK的统一值将被加载到寄存器中,因此对它们进行十几次数学循环不会使着色器变慢。
对于大量的值,纹理是最好的选择。
答案 1 :(得分:-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];