Files
XCEngine/docs/api/XCEngine/UI/DrawData/DrawData.md

2.7 KiB
Raw Blame History

DrawData

命名空间: XCEngine::UI

类型: structs + classes

头文件: XCEngine/UI/DrawData.h

描述: XCUI 绘制命令缓冲区定义颜色、命令类型、单条命令、draw list 和多 draw-list 聚合容器。

概览

DrawData.h 当前把绘制层拆成两级:

  • UIDrawList
    • 面向单个逻辑图层或单个文档的命令顺序缓冲区
    • 通过 AddFilledRect(...)AddRectOutline(...)AddText(...)AddImage(...)PushClipRect(...)PopClipRect() 追加命令
  • UIDrawData
    • 面向一帧或一次提交的 draw-list 集合
    • 通过 EmplaceDrawList(...) / AddDrawList(...) 聚合多个列表

UIDrawCommand 当前用一个统一结构承载所有命令;不同 UIDrawCommandType 只消费自己需要的字段,未使用字段保持默认值。

关键声明

声明 角色
UIColor RGBA 颜色。
UIDrawCommandType FilledRectRectOutlineTextImagePushClipRectPopClipRect 六类命令。
UIDrawCommand 单条绘制命令及其 rect/position/uv/text/texture 等参数。
UIDrawList 追加式命令列表。
UIDrawData 多 draw-list 聚合容器。

当前实现行为

  • UIDrawList 当前严格保留追加顺序,不做排序、合批或去重。
  • PushClipRect(...) / PopClipRect() 只是把 clip 操作编码成命令;真正的 clip stack 语义由消费端实现。
  • UIDrawData::GetTotalCommandCount() 当前通过遍历全部 draw list 求和,没有额外缓存。
  • UIDrawData::Clear() 会清空整个 draw-list 数组;UIDrawList::Clear() 只清空单个列表的命令,不改 debugName
  • ImGuiTransitionBackend 当前逐条翻译 UIDrawCommandImDrawListUIScreenDocumentHost 则在运行时 UI 渲染末端生成 UIDrawData

测试与调用链

  • tests/Editor/test_xcui_draw_data.cpp 当前直接验证 UIDrawList 的命令顺序、payload 保真和 UIDrawData 的多列表聚合计数。
  • editor/src/XCUIBackend/ImGuiTransitionBackend.h 当前是最直接的消费端,把 PushClipRect / PopClipRect / Text / Image 等命令映射到 ImGui。
  • engine/src/UI/Runtime/UIScreenDocumentHost.cpp 当前在 UI runtime 渲染阶段创建 draw list并把 drawListCountcommandCount 统计写回运行结果。
  • new_editor/src/Shell/UIEditorPanelFrame.cpp 和多组 editor integration 测试当前直接构建 UIDrawListeditor/src/panels/ 下已经没有旧版 XCUIDemoPanel 这类 XCUI demo 面板,相关遗留说明应以 Editor/XCUIBackend 为准。

相关文档