2.2 KiB
2.2 KiB
D3D12WindowRendererImGuiInterop
命名空间: XCEngine::Editor::Platform
类型: inline helper
源文件: editor/src/Platform/D3D12WindowRendererImGuiInterop.h
描述: 把 D3D12WindowRenderer、ImGuiBackendBridge 与可选的前后置渲染回调收束到同一条 present helper 里的平台层桥接函数。
公开入口
| 声明 | 说明 |
|---|---|
RenderImGuiFrame(windowRenderer, imguiBackend, clearColor, beforeUiRender, afterUiRender) |
用 swapchain backbuffer 清屏、执行可选 3D/overlay 回调、提交 ImGui draw data,并完成 present。 |
当前行为
- 这条 helper 会先检查:
RenderContext是否有效- command list / queue 是否存在
- swapchain、当前 render surface、SRV heap 是否存在
- 当前 color attachment 是否存在
- 前置条件不满足时直接返回,不抛异常。
- 真正执行时的顺序是:
- backbuffer 从
Present切到RenderTarget - 绑定 render target 并清屏
- 调用
beforeUiRender,让上层先用同一条 command list 渲染 viewport 等内容 - 重新绑定 swapchain backbuffer
- 绑定 SRV heap 并调用
imguiBackend.RenderDrawData(...) - 可选调用
afterUiRender - backbuffer 切回
Present Close -> ExecuteCommandLists -> Present
- backbuffer 从
当前调用链
editor/src/Application.cpp当前直接通过这条 helper 驱动主窗口一帧的最终提交。beforeUiRender回调当前承接ViewportHostService.RenderRequestedViewports(...)一类非 ImGui 渲染。tests/Editor/test_window_renderer_api.cpp当前至少静态验证了这条 helper 的签名和GetCurrentRenderSurface()访问器契约。
当前边界
- 这是 Windows / D3D12 / ImGui 绑定很紧的 inline helper,不是通用 render loop 抽象。
beforeUiRender被假定会把 swapchain color attachment 保持在RenderTarget状态;helper 只负责在之后重新绑定 backbuffer,不会替调用方补状态修复。