Files
XCEngine/docs/api/XCEngine/Editor/UI/ImGuiBackendBridge/Initialize-And-Shutdown.md

1.8 KiB
Raw Blame History

ImGuiBackendBridge::Initialize / Shutdown

命名空间: XCEngine::Editor::UI

类型: methods

源文件: editor/src/UI/ImGuiBackendBridge.h

签名

void Initialize(
    HWND hwnd,
    ID3D12Device* device,
    ID3D12CommandQueue* commandQueue,
    ID3D12DescriptorHeap* srvHeap,
    UINT srvDescriptorSize,
    UINT srvDescriptorCount,
    int frameCount = 3,
    DXGI_FORMAT backBufferFormat = DXGI_FORMAT_R8G8B8A8_UNORM);
void Shutdown();

作用

初始化或释放 Dear ImGui 的 Win32 + D3D12 backend 绑定状态,并接管一段 SRV descriptor heap 用于 ImGui 纹理显示。

当前实现行为

Initialize(...)

  • 会缓存:
    • m_srvHeap
    • m_srvDescriptorSize
    • m_srvCpuStart
    • m_srvGpuStart
  • 然后按 srvDescriptorCount 初始化 m_srvUsage,用于跟踪该 heap 片段的 descriptor 使用情况。
  • 先调用 ImGui_ImplWin32_Init(hwnd)
  • 再构造 ImGui_ImplDX12_InitInfo 并调用 ImGui_ImplDX12_Init(...)
  • 当前把自定义的 SRV 分配和释放回调挂进了:
    • SrvDescriptorAllocFn
    • SrvDescriptorFreeFn
  • 成功后把 m_initialized 设为 true

Shutdown()

  • 如果当前尚未初始化,直接返回。
  • 否则依次调用:
    • ImGui_ImplDX12_Shutdown()
    • ImGui_ImplWin32_Shutdown()
  • 然后清空 descriptor 使用表与相关 heap 指针、重置 upload fence并把 m_initialized 设回 false

当前实现边界

  • 该类型不负责 ImGui context 生命周期;那部分由 ImGuiSession 管理。
  • 当前后端明确绑定 Win32 + D3D12。

相关文档