Files
XCEngine/docs/api/XCEngine/Editor/Platform/D3D12WindowRenderer/Render-And-RenderContext.md

1.8 KiB
Raw Blame History

D3D12WindowRenderer::Render / GetRenderContext

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

类型: method group

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

签名

void Render(
    UI::ImGuiBackendBridge& imguiBackend,
    const float clearColor[4],
    const std::function<void(const Rendering::RenderContext&)>& beforeUiRender = {});

Rendering::RenderContext GetRenderContext() const;

作用

把一帧编辑器 UI 提交到交换链 back buffer并为上层提供当前窗口渲染上下文。

当前实现行为

Render(...)

  • 只有在 swap chain、command queue、command list 和 SRV heap 都有效时才继续。
  • 若传入了 beforeUiRender,会先以 GetRenderContext() 结果调用它。
  • 然后根据当前 back buffer index
    • 取出对应 RHIResourceView
    • Present 过渡到 RenderTarget
    • 绑定 render target
    • 清屏
  • 随后把 ImGui 使用的 SRV heap 绑定到命令列表,并调用:
imguiBackend.RenderDrawData(d3d12CommandList->GetCommandList());
  • 最后:
    • back buffer 从 RenderTarget 过渡回 Present
    • m_commandList->Close()
    • m_commandQueue->ExecuteCommandLists(...)
    • m_swapChain->Present(1, 0)

GetRenderContext()

  • 当前返回一个轻量 Rendering::RenderContext
  • 其中会填入:
    • device
    • commandList
    • commandQueue
    • backendType = D3D12

设计含义

  • beforeUiRender 是当前窗口 renderer 与更高层 Scene / Viewport 渲染逻辑的接缝点。
  • 它让 Application 能在真正提交 ImGui 之前,把 Scene / Game 视口内容先画进各自 render target。

相关文档