2015-09-15 66 views
1

我有在移動和桌面系統上運行,除了一個微小的問題就好了一個LibGDX應用:檢測的OpenGL ES在LibGDX調整shader代碼相應

在我需要在我的着色精度預選賽的移動設備( precision highp float),但在Mac OS這個當我編譯着色器,因爲精度預選賽技術上只能在OpenGL ES的存在(儘管Windows只是忽略它們)會導致錯誤。

是否有LibGDX一種方法來確定我是否下的OpenGL ES或進行定期的OpenGL運行,所以我可以相應地調整我的shader代碼?除了顯而易見的超級不雅的解決方案,當然:嘗試編譯着色器的預選賽,如果失敗,再試一次沒有。

回答

3

是的,你可以在你的片段着色器的頂部使用預處理指令。

#ifdef GL_ES 
precision highp float; 
#endif 

您還可以使用佔位符,以便您可以調整特定變量的精度。

#ifdef GL_ES 
#define LOWP lowp 
#define MEDP mediump 
#define HIGHP highp 
precision highp float; 
#else 
#define LOWP 
#define MEDP 
#define HIGHP 
#endif 

然後你可以使用文本LOWP代替lowp,它會評估在桌面空白處:

varying LOWP vec4 v_color; 
+0

這是一個真棒的解決方案!謝謝!無需動態調整我的着色器代碼! –

+0

哇我不知道你可以使用ifdef GL_ES,這比我在我的項目中做的更優雅...(在實現中搜索GL_VERSION字符串中的子字符串...) –