1
我有一个片段着色器,将颜色降采样为4种不同的颜色。 要做到这一点,我计算基于从0变化到3。 颜色索引然后我查找在vec4的均匀阵列的最终颜色的值:OpenGL ES 2.0中统一阵列中的片段着色器读取值
阵列的声明:
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驱动程序/编译器中的错误?我有什么有效的替代品?