我有一个可以在移动和桌面系统上运行的LibGDX应用程序,除了一个很小的问题外就好了:
在移动设备上,我需要在我的着色器(precision highp float
)中包含精度限定符,但在Mac OS上,当编译着色器时会导致错误,因为精确限定符在技术上仅存在于OpenGL ES上(尽管Windows只是忽略它们。)
LibGDX中是否有办法确定我是在OpenGL ES下运行还是在常规OpenGL下运行,以便我可以相应地调整着色器代码?当然,除了显而易见的超级优雅的解决方案之外:尝试使用限定符编译着色器,如果失败则再试一次。
答案 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;