Files
XCEngine/docs/api/XCEngine/Editor/Platform/D3D12WindowRendererImGuiInterop/D3D12WindowRendererImGuiInterop.md

2.2 KiB
Raw Blame History

D3D12WindowRendererImGuiInterop

命名空间: XCEngine::Editor::Platform

类型: inline helper

源文件: editor/src/Platform/D3D12WindowRendererImGuiInterop.h

描述: 把 D3D12WindowRendererImGuiBackendBridge 与可选的前后置渲染回调收束到同一条 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 是否存在
  • 前置条件不满足时直接返回,不抛异常。
  • 真正执行时的顺序是:
    1. backbuffer 从 Present 切到 RenderTarget
    2. 绑定 render target 并清屏
    3. 调用 beforeUiRender,让上层先用同一条 command list 渲染 viewport 等内容
    4. 重新绑定 swapchain backbuffer
    5. 绑定 SRV heap 并调用 imguiBackend.RenderDrawData(...)
    6. 可选调用 afterUiRender
    7. backbuffer 切回 Present
    8. Close -> ExecuteCommandLists -> Present

当前调用链

  • 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不会替调用方补状态修复。

相关文档