webgl着色器中无法实现变量数组索引?

时间:2011-06-06 03:43:49

标签: glsl webgl

正如标题所说,我不能在webgl顶点着色器中vector_array[foo](假设foo是范围内和整数),对吗?

纹理是最好的替代方案,还是有解决方法或更好的方法来模仿查找表?

2 个答案:

答案 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];