diff --git a/docs/plan/used/XCUI_Subplan-05_ImGui_Transition_Backend_完成归档_2026-04-04.md b/docs/plan/used/XCUI_Subplan-05_ImGui_Transition_Backend_完成归档_2026-04-04.md new file mode 100644 index 00000000..10e416a5 --- /dev/null +++ b/docs/plan/used/XCUI_Subplan-05_ImGui_Transition_Backend_完成归档_2026-04-04.md @@ -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 适配层 +- 可以渲染基础控件和文本 diff --git a/docs/plan/xcui-subplans/README.md b/docs/plan/xcui-subplans/README.md index 1f50dadb..9fcd89ad 100644 --- a/docs/plan/xcui-subplans/README.md +++ b/docs/plan/xcui-subplans/README.md @@ -3,31 +3,27 @@ 基于 [XCUI完整架构设计与执行计划](../XCUI完整架构设计与执行计划.md) 的并行拆分版本。 当前建议: - -- `Phase 0` 由主线继续推进,目标是把 ImGui 从 engine/editor 公共边界剥离出来。 -- 其他人不要再去碰 `Phase 0` 正在改的边界文件,优先认领下面的独立 subplan。 -- 每个人只领一个 subplan,按“自己负责的目录”做增量开发,避免跨 subplan 改核心契约。 +- `Phase 0` 由主线继续推进,目标是把 ImGui 从 `engine/editor` 公共边界剥离出来。 +- 其他人不要再去碰 `Phase 0` 正在修改的边界文件,优先认领下面的独立 subplan。 +- 每个人只领一个 subplan,按“自己负责的目录”做增量开发,避免跨 subplan 修改核心契约。 推荐并行顺序: - -- 可以立刻开始:`03` `05` `06` +- 可以立即开始:`03` `06` - 建议在 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-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-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 修改。 - 新模块优先放到新目录,不要把 XCUI 新逻辑继续塞进旧的 ImGui helper。 - 每个 subplan 都要自带最小测试或样例,不接受只落抽象不落验证。 - 每个 subplan 完成后,至少产出一个可被其他 subplan 直接依赖的稳定入口。 共享高风险边界: - - `engine/include/XCEngine/UI/` - `engine/include/XCEngine/Core/Layer.h` - `engine/include/XCEngine/Core/LayerStack.h` @@ -35,9 +31,7 @@ - `editor/src/Viewport/IViewportHostService.h` Subplan 列表: - - `Subplan-03`:XCUI Style / Theme / Token -- `Subplan-05`:XCUI ImGui Transition Backend - `Subplan-06`:XCUI Markup / Import / Hot Reload - `Subplan-07`:XCUI Schema Inspector / PropertyGrid - `Subplan-08`:XCUI DockHost / Menu / Panel Shell diff --git a/docs/plan/xcui-subplans/Subplan-05_XCUI-ImGui-Transition-Backend.md b/docs/plan/xcui-subplans/Subplan-05_XCUI-ImGui-Transition-Backend.md deleted file mode 100644 index 4264455b..00000000 --- a/docs/plan/xcui-subplans/Subplan-05_XCUI-ImGui-Transition-Backend.md +++ /dev/null @@ -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 适配层 -- 可以渲染基础控件和文本