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 异常。

相关条目