这是在GLSL 1.0中使用非恒定索引访问数组元素的最佳方法吗?

时间:2018-08-02 12:41:32

标签: glsl webgl

我需要针对1.0规范进行编写,以便我也可以在WebGL 1.0上运行。 我想出了以下辅助函数。

Q1:这是可以做到的最好的吗?还有更多创造性的方法吗? (注意:在编译源代码时,我具有制服的总长度,可以将其注入源代码。但是,在编写逻辑时,我无法确切知道我要处理的内容,因此无法使用vec4之类的东西

Q2:如果我不是使用统一的数组,而是使用纹理,那么创建大小为1-10的纹理的效率是多少?然后使用texture2D()调用访问元素?

precision mediump float;
varying vec4 vColor;
uniform float alpha[5];
float getItem(float[5] a, int index) {
    for(int i=0; i<5;i++) {
        if(i==index) return a[i];
    }
}
void main(void) {
    float c = getItem(alpha, i+1);
    gl_FragColor = vColor;
}

1 个答案:

答案 0 :(得分:0)

根据规范,GLSL ES v1.0应该支持统一数组的动态索引。为什么不使用array[index]对制服进行采样?

关于纹理,如果数据的大小很小,则效率不如使用统一数据,尤其是在应用程序运行时需要更改数据的情况下。