给光影开发者的 MobileGlues 支持指南
自动转换覆盖的语法差异
MobileGlues 在着色器编译前自动完成以下转换:
- 移除
layout(binding)语法块 — 桌面 GLSL 的绑定语法在 GLSL ES 中不存在 - 处理 version 指令 — 把桌面版
#version 430 core等转换为 ES 兼容版本 - 注入精度声明 —
precision highp float;和precision highp int;
开发者不需要为这些差异做任何特殊处理。
平台宏:针对 MobileGlues 做条件编译
自 V1.2.6 起,MobileGlues 自动向所有着色器注入两个宏:
#define MG_MOBILEGLUES // 表示处于 MobileGlues 环境
#define MG_MOBILEGLUES_VERSION 2000 // 版本号(2000 = V2.0.0)
MG_MOBILEGLUES_VERSION 是四位数,每个平台版本都有唯一值。开发者可以在着色器里用 #ifdef 或 #if 区分 MobileGlues 和桌面端,甚至区分不同 MobileGlues 版本。
用法示例
#ifdef MG_MOBILEGLUES
#if MG_MOBILEGLUES_VERSION >= 2000
// MobileGlues V2.0.0 及以上的专用逻辑
// 比如使用某个 V2.0.0 才引入的 ES 扩展
#else
// 旧版 MobileGlues 的回退逻辑
#endif
#else
// 桌面端的逻辑
// 比如使用桌面 OpenGL 独有的渲染特性
#endif
调试:开启忽略报错 + 查看日志
如果你的着色器在 MobileGlues 上无法编译,两步排查:
- 在 MobileGlues 插件应用 Settings 标签页启用「忽略 shader/program 报错」,让渲染器跳过报错继续渲染
- 查看日志文件
/sdcard/MG/latest.log,里面会记录具体是哪个着色器文件、哪一行、什么错误
日志文件路径是固定的 /sdcard/MG/latest.log。如果你使用的启动器把游戏目录放在其他位置,可以先从日志里确认实际路径。
无法自动转换的情况
如果一个光影包依赖桌面 OpenGL 独有的渲染管线特性(而不是纯语法差异),自动转换无法解决。常见的无法转换场景:
- 桌面独有的帧缓冲格式
- 不被 ES 支持的渲染管线阶段
- 依赖桌面 GPU 特定行为的边缘 case
这种情况下需要开发者在平台宏分支里为 MobileGlues 写专门的回退路径。