2.7 KiB
2.7 KiB
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 |
FilledRect、RectOutline、Text、Image、PushClipRect、PopClipRect 六类命令。 |
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当前逐条翻译UIDrawCommand到ImDrawList;UIScreenDocumentHost则在运行时 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,并把drawListCount、commandCount统计写回运行结果。new_editor/src/Shell/UIEditorPanelFrame.cpp和多组 editor integration 测试当前直接构建UIDrawList;editor/src/panels/下已经没有旧版XCUIDemoPanel这类 XCUI demo 面板,相关遗留说明应以 Editor/XCUIBackend 为准。