我需要针对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;
}
答案 0 :(得分:0)
根据规范,GLSL ES v1.0应该支持统一数组的动态索引。为什么不使用array[index]
对制服进行采样?
关于纹理,如果数据的大小很小,则效率不如使用统一数据,尤其是在应用程序运行时需要更改数据的情况下。