Skip to content

新增按实例的实验开关「报告 GLES 3.2」 - #104

Merged
qiyinxi merged 2 commits into
ModAVD:mainfrom
qiyinxi:feat/gles32-switch
Nov 7, 2026
Merged

qiyinxi merged 2 commits into
ModAVD:mainfrom
qiyinxi:feat/gles32-switch

Conversation

@qiyinxi

@qiyinxi qiyinxi commented Nov 7, 2026

Copy link
Copy Markdown
Member

为什么

有的游戏在清单里要求 GLES 3.2,比如 World of Airports 3.7.3(ModAVD/ModAVD#131)。Play 商店按 ro.opengles.version 把 ModAVD 判成不兼容:gfxstream 在 Windows 上的 GLES 翻译层只到 3.1,报的是 196609。走 Vulkan 的游戏其实能跑,WoA 实测从 Play 装上以后能进游戏。

如实报 3.2 要客体改走 ANGLE,另提了 ModAVD/ModAVD#152。这个版本先做一个按实例的实验开关,只改报的版本。

改了什么

  • 客体脚本 gles32.sh(root):on 在 /vendor/build.prop 末尾加一行标记和 ro.opengles.version=196610;off 只删标记和它下面那一行;status 报文件和当前属性对不对得上。
    • init.ranchu.rc 在 early-init 才从开机参数设这个属性,build.prop 先读,所以这一行先占住。
    • 只有装了执行桥的实例能写(remount 后的覆盖层),改动冷启动后生效。
    • 改文件是原地写,inode、权限、SELinux 标签都不变。
  • emu GLES32:照 Play 商店的编排。原来关着的实例开机、改、冷启动核对、再关回去;原来开着的冷启动后照原来的方式开回来;失败时原来关着的也关回去。冷启动后核对客体报的版本,对不上就报错。
    • 状态记在实例记录 instances.<i>.gles32,InstanceInfo.gles32 带出来。
    • 开着时不能卸执行桥。
    • 实例里装了 Play 商店的,结果里提示清 Play 商店的数据,让它按新版本重新判断兼容。
  • CLI modavd gles32 <i> on|off|status;info 开着时多一行。
  • 界面:实例卡片的「更多操作」里加「开启 / 关闭报告 GLES 3.2(实验)」,带确认框和说明;没有执行桥时不能开。接口 POST /api/instances/{i}/gles32-on|off(job),写进 API.md。
  • README 中英文各加一行命令和一段说明。

风险

  • 只改报的版本,实际渲染仍是 3.1。打开以后,真要 GLES 3.2 渲染的应用会装得上、打不开。所以默认关,界面和帮助里都写明是实验功能。
  • 现有游戏会不会因为看到 3.2 换渲染路径,没在这台以外测过,放进下个版本回归(开着开关跑一轮主力游戏)。

测试

  • 单测:
    • sh:on 追加、已有、off 只删两行、别的行原样、不可写、status 各种组合、原地写不换 inode;
    • emu 假客体:原来关着的、原来开着的、没执行桥拒绝、脚本失败和核对不对时关回去、Play 商店提示、执行桥卸载被拒;
    • cli、ui 接口;node 的界面测试(新增 scripts/test_gles32_ui.mjs)。
    • gofmt、go vet、相关包的 go test 都过。
  • 实机(flow-b,带执行桥的 API 34 实例):
    • 开着时 on:冷启动后 ro.opengles.version=196610,build.prop 末尾是标记和那一行,实际渲染仍报 OpenGL ES 3.1;
    • off:冷启动后 196609,build.prop 和改之前逐字节相同;
    • 关着时 on:自己开机、改、冷启动核对、关回去,82 秒。

Refs ModAVD/ModAVD#131
Refs ModAVD/ModAVD#152

有的游戏在清单里要求 GLES 3.2,Play 商店按 ro.opengles.version 把只报 3.1 的实例判成不兼容。
新增 modavd gles32 <i> on|off|status 和管理器里「更多操作」的开关:在执行桥带来的可写系统覆盖层里,
给 /vendor/build.prop 加(或去掉)一行 ro.opengles.version=196610,冷启动一次后核对实例报的版本。
只改报的版本,实际渲染仍是 3.1;默认关,没有执行桥的实例不能开,开着时不能卸执行桥。

- 客体脚本 gles32.sh,改文件时保住 inode、权限和 SELinux 标签
- emu.GLES32:检查、锁、开机、冷启动、核对、关机照 PlayStore 的写法,记在 instances.<i>.gles32
- CLI gles32 命令、info 里的一行;界面的 gles32-on / gles32-off 任务、菜单项和确认框
- 单测:sh 脚本、假客体的编排、CLI、界面接口和页面模块

Refs ModAVD/ModAVD#131
@qiyinxi
qiyinxi added this pull request to the merge queue Nov 7, 2026
Merged via the queue into ModAVD:main with commit 02f4da5 Nov 7, 2026
6 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant