Splash 渲染线程
基本信息
| 属性 | 值 |
|---|---|
| 配置项 | general.threadedRendering |
| 默认值 | true |
| 实现位置 | MinecraftDisplayer |
| 相关字段 | SharedDrawable loadingDrawable、volatile boolean splashRenderKillSwitch、splashRenderThread |
行为
开启时(默认)
- 通过
SharedDrawable让独立 splash 渲染线程接管主 OpenGL 上下文;主线程用 SharedDrawable。 - 灵感来自 FML 的
SplashProgress(注释明确)。 - 进度变化时只更新 volatile 字段,由渲染线程
renderProgressOnMainThread拉取 + 渲染。 - 关闭:
close()翻splashRenderKillSwitch=true通知渲染线程退出。
关闭时
- 直接在主线程渲染,每次
displayProgress都要走renderProgressOnMainThread。 - 节流:
MIN_MAIN_THREAD_FRAME_INTERVAL_NS = 50_000_000L(50ms)。同时满足以下两个条件时强制渲染:- 主阶段文本变化(
mainTextChanged = !text.equals(currentText)) - sub-progress 完成(
subPercent >= 1.0F且旧值非 1.0F)
- 主阶段文本变化(
- 用
renderInProgress布尔位防止重入。 - 错误处理:
RENDER_ERROR_LOG_INTERVAL_NS = 5s,同类错误每 5 秒只打一次日志。
数值
| 字段 | 默认值 | 范围 |
|---|---|---|
general.threadedRendering |
true |
– |
MIN_MAIN_THREAD_FRAME_INTERVAL_NS |
50_000_000 | – |
RENDER_ERROR_LOG_INTERVAL_NS |
5 秒 | – |
使用场景
- 桌面客户端(OpenGL 支持共享上下文)→ 保持
true,动画流畅。 - Android 等不支持共享上下文的平台 → 设为
false,避免 SharedDrawable 异常。
相关条目
- 通用配置 - 完整 general 段
- ProgressDisplayer 实现 - MinecraftDisplayer 内部结构