Files
XCEngine/docs/api/XCEngine/Editor/Platform/D3D12WindowRenderer/Initialize-And-Shutdown.md

1.7 KiB
Raw Blame History

D3D12WindowRenderer::Initialize / Shutdown

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

类型: methods

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

签名

bool Initialize(HWND hwnd, int width, int height);
void Shutdown();

作用

初始化或释放编辑器主窗口使用的 D3D12 设备、交换链、命令队列、命令列表、SRV heap 和 back buffer 视图。

当前实现行为

Initialize(...)

  • 会先调用 Shutdown(),确保旧状态完全释放。
  • 当前只有在以下条件满足时才继续:
    • hwnd 非空
    • width > 0
    • height > 0
  • 然后依次创建并校验:
    • RHIDevice,类型固定为 D3D12
    • Direct command queue
    • Direct command list
    • swap chainbuffer count 固定为 3
    • shader-visible SRV descriptor pooldescriptor count 固定为 64
  • commandList 初始化后会先 Close() 一次。
  • 成功创建 SRV heap 后,会调用 RecreateBackBufferViews() 为所有 swap chain back buffer 创建 RTV。
  • 任一阶段失败都会调用 Shutdown() 回滚,并返回 false

Shutdown()

  • 会先调用 WaitForGpuIdle(),再释放 back buffer views。
  • 然后按顺序释放:
    • m_srvPool
    • m_swapChain
    • m_commandList
    • m_commandQueue
    • m_device
  • 最后清空窗口句柄、尺寸和 SRV descriptor size。

当前实现边界

  • 当前对象自己持有 RHI 抽象层对象,而不是直接持有裸 ID3D12CommandAllocatorIDXGISwapChain3 成员。
  • 它是编辑器宿主窗口级渲染器,不是引擎通用 renderer。

相关文档