【问题标题】:Detecting OpenGL ES in LibGDX to adjust shader code accordingly在 LibGDX 中检测 OpenGL ES 以相应地调整着色器代码
【发布时间】:2015-09-15 19:56:06
【问题描述】:

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

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

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

【问题讨论】:

    标签: opengl opengl-es libgdx


    【解决方案1】:

    是的,您可以在片段着色器的顶部使用预处理指令。

    #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;
    

    【讨论】:

    • 这是一个很棒的解决方案!谢谢!甚至不需要动态调整我的着色器代码!
    • 哇,我不知道你可以使用 ifdef GL_ES,这比我在我的项目中所做的要优雅得多...(在实现报告的 GL_VERSION 字符串中搜索子字符串...)
    猜你喜欢
    • 2013-08-05
    • 1970-01-01
    • 2017-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多