Files
XCEngine/docs/api/XCEngine/Editor/UI/ImGuiBackendBridge/ImGuiBackendBridge.md

52 lines
1.7 KiB
Markdown
Raw Normal View History

2026-03-27 14:40:29 +08:00
# ImGuiBackendBridge
**命名空间**: `XCEngine::Editor::UI`
**类型**: `class`
**源文件**: `editor/src/UI/ImGuiBackendBridge.h`
**描述**: 封装 Dear ImGui Win32 + D3D12 backend 的初始化、逐帧驱动和窗口消息桥接。
## 概述
`ImGuiBackendBridge` 是编辑器 UI 栈里很关键但很底层的一环。
它不创建 ImGui context也不负责布局而是把现有 context 接到具体平台和渲染后端上。
当前核心职责:
- 初始化 `imgui_impl_win32`
- 初始化 `imgui_impl_dx12`
- 每帧调用 backend 的 `NewFrame`
-`ImGui::GetDrawData()` 提交到 D3D12 command list
- 处理 Win32 消息转发
## 当前实现
- `Initialize()` 需要 `HWND``ID3D12Device*` 和 SRV heap
- 默认 frame count 为 `3`
- 默认 back buffer format 为 `DXGI_FORMAT_R8G8B8A8_UNORM`
- `HandleWindowMessage()` 是静态 helper直接转发给 `ImGui_ImplWin32_WndProcHandler`
## 设计说明
把 backend 绑定层单独抽出来,有两个很现实的好处:
- `Application` 不需要直接依赖第三方 backend 细节
- 如果未来替换成别的渲染后端或宿主窗口层,修改点更集中
在商业级编辑器里这一层通常都存在即使名字不同本质上也是“UI 平台绑定桥”。
## 当前限制
- 当前明确绑定 Win32 + D3D12
- 没有重复初始化保护之外的更复杂状态机
- 不负责 ImGui context 生命周期,那部分由 [`ImGuiSession`](../ImGuiSession/ImGuiSession.md) 管理
## 相关文档
- [UI](../UI.md)
- [ImGuiSession](../ImGuiSession/ImGuiSession.md)
- [Application](../../Application/Application.md)
- [D3D12WindowRenderer](../../Platform/D3D12WindowRenderer/D3D12WindowRenderer.md)