Bevy UI Text

Bevy UI 文本布局系统的核心概念与底层修复记录。

文本布局架构

Bevy UI 文本布局系统的核心结构包括:

  • GlyphRun:一组共享相同样式的连续字形
  • RunGeometry:字形运行的几何边界框
  • BreakerState:断行状态机,控制文本换行逻辑

近期修复

RunGeometry 边界框计算修复(2026-05-12)

PR #24247 修复了 RunGeometry 边界框计算中的冗余累加错误。GlyphRun::offset 已包含 inline_min_coord,但此前代码重复加了一次。

当前因 BreakerState::set_line_x 未被调用而未触发可见 bug,但为潜在隐患。修复属于 UI/文本系统底层正确性保障。

字体图集 padding 计算修复(2026-08-07)

PR #25225 修复了边界尺寸字形(如 1021px)触发 panic 的问题。add_glyph_to_atlas 此前按字形原始尺寸 next_power_of_two 创建图集(1021→1024),但 DynamicTextureAtlasBuilder 在四周各预留 2px padding,实际需要 1025px,导致插入时 panic。

修复在计算前加入 GLYPH_ATLAS_PADDING * 2 再取幂:

glyph_max_size
    .saturating_add(GLYPH_ATLAS_PADDING * 2)  // 先加双侧 padding
    .next_power_of_two()
    .max(512)

该 bug 最初在移动端 WebGPU(Samsung Galaxy A14)上的大尺寸 Text2d 标签触发(Issue #25224)。WebGPU/移动平台纹理尺寸上限更严格,对这类边界字形更敏感。

相关页面