1.8 KiB
1.8 KiB
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)
- back buffer 从
GetRenderContext()
- 当前返回一个轻量
Rendering::RenderContext - 其中会填入:
devicecommandListcommandQueuebackendType = D3D12
设计含义
beforeUiRender是当前窗口 renderer 与更高层 Scene / Viewport 渲染逻辑的接缝点。- 它让
Application能在真正提交 ImGui 之前,把 Scene / Game 视口内容先画进各自 render target。