根据GLSL ES reference,在片段着色器中支持highp
是可选的。所以我在我的所有片段着色器中一直使用precision mediump float;
,所以我没有设备兼容性问题。在某些情况下,仅用10位相对精度就可以生成好看的输出,而且我希望能够在必要时切换到highp
。在iOS/Android的片段着色器中使用highp可以吗?
安全性如何在实践中,要求在片段着色器highp
支持?我已经在各种设备上尝试过它,并且它适用于我尝试过的每个设备。我只瞄准Android 4.1+和iOS 8+,所以如果只有那些不支持它的硬件旧设备,那我就没有问题。
我知道有运行时检查等我应该做的,但首先我只是想获得在我们谈论野外设备的百分比大致的感觉。我无法在任何地方找到这些信息。如果只有75%的设备支持highp
,那么我会坚持mediump
。如果有99.9%的设备支持它,我们来了highp
。
是的,我目前使用'mediump'作为默认值,并在任何地方明确指定'lowp'。我只是将需要它的变量碰到'highp'并保留缺省值。 – Karu
关于回退行为,规范意味着如果设备不支持它,则“highp”是一个编译错误:“顶点语言要求任何使用lowp,mediump和highp的编译和链接而不出错。 lowp和mediump编译没有错误,支持highp是可选的。“ – Karu
Yikes我认为你是对的。Spec还说:“如果实现无法提供在编译单元中存储变量的声明精度,则必须导致编译或链接错误。”实际上,我在片段着色器中使用highp发布了很多游戏,并且从来没有发生错误。似乎我可能会依赖司机的不正确行为并逃避。 – Columbo