检测LibGDX中的OpenGL ES以相应地调整着色器代码

时间:2015-09-15 19:56:07

标签: opengl opengl-es libgdx

我有一个可以在移动和桌面系统上运行的LibGDX应用程序,除了一个很小的问题外就好了:

在移动设备上,我需要在我的着色器(precision highp float)中包含精度限定符,但在Mac OS上,当编译着色器时会导致错误,因为精确限定符在技术上仅存在于OpenGL ES上(尽管Windows只是忽略它们。)

LibGDX中是否有办法确定我是在OpenGL ES下运行还是在常规OpenGL下运行,以便我可以相应地调整着色器代码?当然,除了显而易见的超级优雅的解决方案之外:尝试使用限定符编译着色器,如果失败则再试一次。

1 个答案:

答案 0 :(得分: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;