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(内嵌库) 情况相同。

相关条目