根據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