# D3D12WindowRenderer::Render / GetRenderContext **命名空间**: `XCEngine::Editor::Platform` **类型**: `method group` **源文件**: `editor/src/Platform/D3D12WindowRenderer.h` ## 签名 ```cpp void Render( UI::ImGuiBackendBridge& imguiBackend, const float clearColor[4], const std::function& 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 绑定到命令列表,并调用: ```cpp 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。 ## 相关文档 - [D3D12WindowRenderer](D3D12WindowRenderer.md) - [Resize / BeginFrame](Resize-And-BeginFrame.md) - [ImGuiBackendBridge](../../UI/ImGuiBackendBridge/ImGuiBackendBridge.md)