【发布时间】:2018-08-16 21:44:27
【问题描述】:
我需要根据 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;
}
【问题讨论】:
-
又一个例子说明了为什么应该使用纹理。
float elem = texture2D(arrayTexture, vec2((.5 + index) / textureWidth, 0)).r; -
纹理对于像 1 到 10 这样的非常小的尺寸是否合适?我很乐意创建它们,因为它们总体上简化了我的代码