【发布时间】:2014-12-20 12:54:35
【问题描述】:
我有一个片段着色器,可以将颜色下采样为 4 种不同的颜色。 为此,我根据从 0 到 3 变化的颜色计算索引。 然后我在统一的 vec4 数组中查找最终颜色的值:
数组的声明:
uniform vec4 u_colors[4];
查找:
gl_FragColor = u_colors[int(index)];
这在某些设备上运行良好,但在某些设备上(例如在 Tegra 4 上)似乎我无法访问带有变量的数组,并且输出是垃圾。我发现的唯一解决方法是:
index = floor(index);
if (index < 2.0) {
if (index == 0.0) {
gl_FragColor = u_colors[0];
} else {
gl_FragColor = u_colors[1];
}
} else {
if (index == 2.0) {
gl_FragColor = u_colors[2];
} else {
gl_FragColor = u_colors[3];
}
}
这行得通,令人惊讶的是,性能仍然相当不错,但显然并不理想。
是我做错了什么还是这是 GPU 驱动程序/编译器中的错误?我有哪些有效的替代方案?
【问题讨论】:
标签: opengl-es fragment-shader uniform glsles