2015-09-15 34 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字符串中的子字符串...) –