我试图编写一个使用统一数组的片段着色器(因为我的着色器中需要很多值,这些值在调用过程中是一致的)。我在 webgl 上尝试这个,所以不能使用 uniformbuffers 来打包很多制服。我可以使用 2D 纹理来包装这些制服,但是制服的某些值会超过 255,所以我需要使用不广泛使用的浮点纹理,特别是在移动设备上。所以我不得不坚持使用统一数组的方法。我的片段着色器代码的声明为:
uniform float array[100];
现在在 Intel HD 显卡上使用大小为 100 的阵列,性能下降了 50%,但在 nvdia 卡上情况并非如此。我曾询问过MAX_FRAGMENT_UNIFORM_VECTORS
我221
的情况。我尝试了这个数组的不同大小,并看到了一个非常奇怪的行为。
如果数组的大小超过 81 ,性能会突然下降 50% 。有没有人遇到过这个问题?有没有办法解决这个问题?请注意,在浏览器中,仅支持着色器版本 1.0 (#version 100)。