Archive XCUI Subplan-05 plan
This commit is contained in:
@@ -0,0 +1,83 @@
|
|||||||
|
# XCUI Subplan 05: ImGui Transition Backend
|
||||||
|
|
||||||
|
归档日期:
|
||||||
|
- `2026-04-04`
|
||||||
|
|
||||||
|
状态:
|
||||||
|
|
||||||
|
- 已完成
|
||||||
|
|
||||||
|
本次实际完成内容:
|
||||||
|
- 新增 XCUI 绘制数据契约:`UIColor`、`UIDrawCommandType`、`UIDrawCommand`、`UIDrawList`、`UIDrawData`
|
||||||
|
- 新增 `ImGuiTransitionBackend` 过渡后端,支持 `FilledRect`、`RectOutline`、`Text`、`Image`、`PushClipRect`、`PopClipRect`
|
||||||
|
- 新增最小 editor 接入样例 `XCUIDemoPanel`,用于在现有编辑器壳层中演示 XCUI draw data 到 ImGui draw call 的过渡链路
|
||||||
|
- 将 demo panel 接入 editor workspace,并补齐 editor/tests 构建入口
|
||||||
|
- 新增 Subplan-05 配套测试,覆盖 draw data 聚合与 backend flush 行为
|
||||||
|
|
||||||
|
本次涉及文件:
|
||||||
|
- `editor/CMakeLists.txt`
|
||||||
|
- `editor/src/Core/EditorWorkspace.h`
|
||||||
|
- `editor/src/XCUIBackend/ImGuiTransitionBackend.h`
|
||||||
|
- `editor/src/panels/XCUIDemoPanel.cpp`
|
||||||
|
- `editor/src/panels/XCUIDemoPanel.h`
|
||||||
|
- `engine/include/XCEngine/UI/DrawData.h`
|
||||||
|
- `tests/editor/CMakeLists.txt`
|
||||||
|
- `tests/editor/test_xcui_draw_data.cpp`
|
||||||
|
- `tests/editor/test_xcui_imgui_transition_backend.cpp`
|
||||||
|
|
||||||
|
验证结果:
|
||||||
|
- `cmake --build . --config Debug --target editor_tests -- /m:1 /p:CL_MPCount=1`
|
||||||
|
- `ctest -C Debug -R "XCUIDrawDataTest|XCUIImGuiTransitionBackendTest" --output-on-failure`
|
||||||
|
- 结果:`4/4` 通过
|
||||||
|
- `cmake --build . --config Debug --target XCEditor -- /m:1 /p:UseMultiToolTask=false /p:CL_MPCount=1`
|
||||||
|
- 结果:通过
|
||||||
|
|
||||||
|
提交记录:
|
||||||
|
- `75ded6f` `Add XCUI ImGui transition backend MVP`
|
||||||
|
|
||||||
|
当前结论:
|
||||||
|
- `Subplan-05` 的最小过渡后端已经可用,可以作为 XCUI 在 editor 中落地的第一层渲染适配桥
|
||||||
|
- XCUI 逻辑层仍然不直接依赖 ImGui API,ImGui 仅存在于过渡 backend 和 editor 接入层
|
||||||
|
- 后续 `Subplan-08`、`Subplan-09` 可以直接基于这套 draw data 和 transition backend 继续推进
|
||||||
|
|
||||||
|
原始 subplan 内容归档如下:
|
||||||
|
|
||||||
|
# Subplan 05:XCUI ImGui Transition Backend
|
||||||
|
|
||||||
|
目标:
|
||||||
|
- 在过渡阶段,让 ImGui 只承担宿主窗口和 draw submission 容器的职责
|
||||||
|
- 由 XCUI 自己生成 draw list,再交给 ImGui backend 落屏
|
||||||
|
|
||||||
|
负责人边界:
|
||||||
|
- 负责 `editor/src/XCUIBackend/` 或等价新目录
|
||||||
|
- 负责 XCUI draw primitive 到 ImGui draw call 的映射
|
||||||
|
- 不负责 XCUI tree、布局、样式的内部规则
|
||||||
|
|
||||||
|
建议目录:
|
||||||
|
- `editor/src/XCUIBackend/`
|
||||||
|
- `editor/src/UI/` 中与 XCUI backend 直接相关的桥接代码
|
||||||
|
- `tests/Editor` 中 backend 相关测试
|
||||||
|
|
||||||
|
前置依赖:
|
||||||
|
- 需要 `Subplan-01` 给出稳定 draw data 和 frame submission 契约
|
||||||
|
- 需要 `Subplan-03` 提供样式查询结果
|
||||||
|
|
||||||
|
现在就可以先做的内容:
|
||||||
|
- 定义 `UIDrawList` / `UIDrawCommand` / `UIDrawText` / `UIDrawImage` / `UIDrawClip`
|
||||||
|
- 先做矩形、边框、文字、图片四类 primitive
|
||||||
|
- 设计 frame begin / submit / end 的 adapter 流程
|
||||||
|
- 写一个最小 demo panel,用 XCUI draw list 通过 ImGui 显示
|
||||||
|
|
||||||
|
明确不做:
|
||||||
|
- 不做 RHI native backend
|
||||||
|
- 不做 docking 逻辑
|
||||||
|
|
||||||
|
交付物:
|
||||||
|
- XCUI 到 ImGui 的过渡 backend
|
||||||
|
- primitive 转换测试或快照测试
|
||||||
|
- 最小 editor 接入样例
|
||||||
|
|
||||||
|
验收标准:
|
||||||
|
- XCUI 逻辑层不直接依赖 ImGui API
|
||||||
|
- ImGui 只出现在 backend 适配层
|
||||||
|
- 可以渲染基础控件和文本
|
||||||
@@ -3,31 +3,27 @@
|
|||||||
基于 [XCUI完整架构设计与执行计划](../XCUI完整架构设计与执行计划.md) 的并行拆分版本。
|
基于 [XCUI完整架构设计与执行计划](../XCUI完整架构设计与执行计划.md) 的并行拆分版本。
|
||||||
|
|
||||||
当前建议:
|
当前建议:
|
||||||
|
- `Phase 0` 由主线继续推进,目标是把 ImGui 从 `engine/editor` 公共边界剥离出来。
|
||||||
- `Phase 0` 由主线继续推进,目标是把 ImGui 从 engine/editor 公共边界剥离出来。
|
- 其他人不要再去碰 `Phase 0` 正在修改的边界文件,优先认领下面的独立 subplan。
|
||||||
- 其他人不要再去碰 `Phase 0` 正在改的边界文件,优先认领下面的独立 subplan。
|
- 每个人只领一个 subplan,按“自己负责的目录”做增量开发,避免跨 subplan 修改核心契约。
|
||||||
- 每个人只领一个 subplan,按“自己负责的目录”做增量开发,避免跨 subplan 改核心契约。
|
|
||||||
|
|
||||||
推荐并行顺序:
|
推荐并行顺序:
|
||||||
|
- 可以立即开始:`03` `06`
|
||||||
- 可以立刻开始:`03` `05` `06`
|
|
||||||
- 建议在 Core/Backend 契约初步稳定后启动:`07` `08` `09`
|
- 建议在 Core/Backend 契约初步稳定后启动:`07` `08` `09`
|
||||||
|
|
||||||
已完成归档:
|
已完成归档:
|
||||||
|
|
||||||
- `Subplan-01`:已于 `2026-04-04` 归档到 [../used/XCUI_Subplan-01_Core_Tree_State_完成归档_2026-04-04.md](../used/XCUI_Subplan-01_Core_Tree_State_完成归档_2026-04-04.md)
|
- `Subplan-01`:已于 `2026-04-04` 归档到 [../used/XCUI_Subplan-01_Core_Tree_State_完成归档_2026-04-04.md](../used/XCUI_Subplan-01_Core_Tree_State_完成归档_2026-04-04.md)
|
||||||
- `Subplan-02`:已于 `2026-04-04` 归档到 [../used/XCUI_Subplan-02_LayoutEngine_完成归档_2026-04-04.md](../used/XCUI_Subplan-02_LayoutEngine_完成归档_2026-04-04.md)
|
- `Subplan-02`:已于 `2026-04-04` 归档到 [../used/XCUI_Subplan-02_LayoutEngine_完成归档_2026-04-04.md](../used/XCUI_Subplan-02_LayoutEngine_完成归档_2026-04-04.md)
|
||||||
- `Subplan-04`:已于 `2026-04-04` 归档到 [../used/XCUI_Input_Focus_Shortcut_Subplan_完成归档_2026-04-04.md](../used/XCUI_Input_Focus_Shortcut_Subplan_完成归档_2026-04-04.md)
|
- `Subplan-04`:已于 `2026-04-04` 归档到 [../used/XCUI_Input_Focus_Shortcut_Subplan_完成归档_2026-04-04.md](../used/XCUI_Input_Focus_Shortcut_Subplan_完成归档_2026-04-04.md)
|
||||||
|
- `Subplan-05`:已于 `2026-04-04` 归档到 [../used/XCUI_Subplan-05_ImGui_Transition_Backend_完成归档_2026-04-04.md](../used/XCUI_Subplan-05_ImGui_Transition_Backend_完成归档_2026-04-04.md)
|
||||||
|
|
||||||
统一协作约束:
|
统一协作约束:
|
||||||
|
|
||||||
- 共享契约文件尽量只由主线或对应 owner 修改。
|
- 共享契约文件尽量只由主线或对应 owner 修改。
|
||||||
- 新模块优先放到新目录,不要把 XCUI 新逻辑继续塞进旧的 ImGui helper。
|
- 新模块优先放到新目录,不要把 XCUI 新逻辑继续塞进旧的 ImGui helper。
|
||||||
- 每个 subplan 都要自带最小测试或样例,不接受只落抽象不落验证。
|
- 每个 subplan 都要自带最小测试或样例,不接受只落抽象不落验证。
|
||||||
- 每个 subplan 完成后,至少产出一个可被其他 subplan 直接依赖的稳定入口。
|
- 每个 subplan 完成后,至少产出一个可被其他 subplan 直接依赖的稳定入口。
|
||||||
|
|
||||||
共享高风险边界:
|
共享高风险边界:
|
||||||
|
|
||||||
- `engine/include/XCEngine/UI/`
|
- `engine/include/XCEngine/UI/`
|
||||||
- `engine/include/XCEngine/Core/Layer.h`
|
- `engine/include/XCEngine/Core/Layer.h`
|
||||||
- `engine/include/XCEngine/Core/LayerStack.h`
|
- `engine/include/XCEngine/Core/LayerStack.h`
|
||||||
@@ -35,9 +31,7 @@
|
|||||||
- `editor/src/Viewport/IViewportHostService.h`
|
- `editor/src/Viewport/IViewportHostService.h`
|
||||||
|
|
||||||
Subplan 列表:
|
Subplan 列表:
|
||||||
|
|
||||||
- `Subplan-03`:XCUI Style / Theme / Token
|
- `Subplan-03`:XCUI Style / Theme / Token
|
||||||
- `Subplan-05`:XCUI ImGui Transition Backend
|
|
||||||
- `Subplan-06`:XCUI Markup / Import / Hot Reload
|
- `Subplan-06`:XCUI Markup / Import / Hot Reload
|
||||||
- `Subplan-07`:XCUI Schema Inspector / PropertyGrid
|
- `Subplan-07`:XCUI Schema Inspector / PropertyGrid
|
||||||
- `Subplan-08`:XCUI DockHost / Menu / Panel Shell
|
- `Subplan-08`:XCUI DockHost / Menu / Panel Shell
|
||||||
|
|||||||
@@ -1,47 +0,0 @@
|
|||||||
# Subplan 05:XCUI ImGui Transition Backend
|
|
||||||
|
|
||||||
目标:
|
|
||||||
|
|
||||||
- 在过渡阶段,用 ImGui 只做宿主窗口与 draw submission 容器。
|
|
||||||
- 让 XCUI 自己生成 draw list,再由 ImGui backend 负责落屏。
|
|
||||||
|
|
||||||
负责人边界:
|
|
||||||
|
|
||||||
- 负责 `editor/src/XCUIBackend/` 或等价新目录。
|
|
||||||
- 负责 XCUI draw primitive 到 ImGui draw call 的映射。
|
|
||||||
- 不负责 XCUI tree、布局、样式的内部规则。
|
|
||||||
|
|
||||||
建议目录:
|
|
||||||
|
|
||||||
- `editor/src/XCUIBackend/`
|
|
||||||
- `editor/src/UI/` 中与 XCUI backend 直接相关的桥接代码
|
|
||||||
- `tests/Editor` 中 backend 相关测试
|
|
||||||
|
|
||||||
前置依赖:
|
|
||||||
|
|
||||||
- 需要 `Subplan 01` 给出稳定 draw data / frame submission 契约。
|
|
||||||
- 需要 `Subplan 03` 提供样式查询结果。
|
|
||||||
|
|
||||||
现在就可以先做的内容:
|
|
||||||
|
|
||||||
- 定义 `UIDrawList` / `UIDrawCommand` / `UIDrawText` / `UIDrawImage` / `UIDrawClip`
|
|
||||||
- 先做矩形、边框、文字、图片四类 primitive
|
|
||||||
- 设计 frame begin / submit / end 的 adapter 流程
|
|
||||||
- 写一个最小 demo panel,用 XCUI draw list 通过 ImGui 显示
|
|
||||||
|
|
||||||
明确不做:
|
|
||||||
|
|
||||||
- 不做 RHI native backend
|
|
||||||
- 不做 docking 逻辑
|
|
||||||
|
|
||||||
交付物:
|
|
||||||
|
|
||||||
- XCUI -> ImGui 过渡 backend
|
|
||||||
- primitive 转换测试或快照测试
|
|
||||||
- 最小 editor 接入样例
|
|
||||||
|
|
||||||
验收标准:
|
|
||||||
|
|
||||||
- XCUI 逻辑层不直接依赖 ImGui API
|
|
||||||
- ImGui 只出现在 backend 适配层
|
|
||||||
- 可以渲染基础控件和文本
|
|
||||||
Reference in New Issue
Block a user