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驅動程序/編譯器中的錯誤?我有什麼有效的替代品?