Sodium 与 Reese’s Sodium Options(内嵌渲染选项库)
基本信息
| 组件 | 包 | 文件数 | modid |
|---|---|---|---|
| Sodium | me.jellysquid.mods.sodium |
48 | 无 |
| Reese’s Sodium Options | me.flashyreese.mods.reeses_sodium_options |
11 | 无 |
| 合计 | 59 |
两者都是 1.7.10 时代的独立 mod,被 Angelica 吸收为其视频设置界面的实现。都没有 @Mod 注解。
包结构
Sodium 的 48 个文件全部在 me/jellysquid/mods/sodium/ 一个子包里(无更深分层):
me/jellysquid/mods/sodium/ 48
Reese’s 的 11 个文件在 me/flashyreese/。
三个互斥的设置界面
这是 Sodium 被内嵌的核心原因 —— Angelica 在 Proxy 的 onGuiInit(:385-403)里拦截 GuiVideoSettings 并弹出三者之一:
| 顺序 | 条件 | 弹出界面 | 来源包 |
|---|---|---|---|
| 1 | enableNotFineOptions 或 按住 Shift |
GuiCustomMenu(5 分页) |
jss.notfine.gui |
| 2 | !enableReesesSodiumOptions 或 按住 Ctrl |
SodiumOptionsGUI |
me.jellysquid |
| 3 | 其余(默认) | ReeseSodiumVideoOptionsScreen |
me.flashyreese |
对应配置默认值:
| 配置 | 默认 | 效果 |
|---|---|---|
enableNotFineOptions |
false |
默认不进分支 1 |
enableReesesSodiumOptions |
true |
默认走分支 3(Reese) |
Shift / Ctrl 是强制覆盖快捷键:即便配置不满足,按住也会切到对应界面。
angelica-options.json
Sodium 的配置对象由 ClientProxy.options() 懒加载:
// ClientProxy.java:114-119
public static SodiumGameOptions options() {
if (CONFIG == null) {
CONFIG = SodiumGameOptions.load(ConfigMigrator.handleConfigMigration("angelica-options.json"));
}
return CONFIG;
}
| 属性 | 值 |
|---|---|
| 配置文件 | angelica-options.json(JSON 格式,不是 .cfg) |
| 配置类 | me.jellysquid.mods.sodium.client.gui.SodiumGameOptions |
| 迁移器 | com.gtnewhorizons.angelica.config.ConfigMigrator |
ConfigMigrator.handleConfigMigration(...) 表明 Angelica 从旧版配置格式迁移到该 JSON。
options() 的 5 个消费点
options() 是全 mod 配置读取最热的入口:
| 消费点 | 用途 |
|---|---|
ClientProxy.java:122 |
toggleVSync:写 opts.advanced.vsyncMode 后 writeChanges() |
ClientProxy.java:157-161 |
init:为 null 时取 FrameRateOptions.defaultMode(),同步到 gameSettings.enableVsync 与 GLStateManager.setVSyncPreference |
FpsReducer.java:53 |
读 options().reducer(ReducerSettings) |
FpsReducer.java:103 |
同上,effectiveCap 内 |
ClientProxy.java:161 |
vsyncMode.tearFree() |
VSync 的双重来源
toggleVSync(boolean)(:121-130):
opts.advanced.vsyncMode = enabled ? GLStateManager.preferredTearFreeMode() : VSyncMode.OFF;
opts.writeChanges();
GLStateManager.setVSyncMode(opts.advanced.vsyncMode);
即:启用时不是简单开 VSync,而是取 GLSM 报告的当前硬件支持的 tear-free 模式(由 glsm 子项目提供);同时持久化到 JSON 并立即应用到 GLSM。writeChanges() 的 IOException 被捕获并打 WARN「Could not persist the vsync mode」。
FpsReducer 的配置也在此处
FpsReducer 的全部参数(enabled、idleTimeoutMinutes、unfocusedFpsLimit、idleFpsLimit、limitMenuFrameRate)来自 SodiumGameOptions.ReducerSettings,即存在 angelica-options.json 里,不在 angelica-modules.cfg。见 FpsReducer。
资源域
assets/sodium/ 资源域存在,但没有 lang 目录(0 个 .lang 文件)。与 Iris(内嵌库) 情况相同。
相关条目
- FpsReducer -
ReducerSettings的主要消费者 - Proxy - 三界面分叉与
options() - Iris(内嵌库) - 同样无 lang 的资源域
- Mod ID 与注册总表 - 无 modid 的内嵌库清单
- 资源域与语言文件 - 资源域与 lang 的对应关系