Refactor new editor host resize pipeline

This commit is contained in:
2026-04-13 23:09:02 +08:00
parent 712f99e723
commit 4362008b39
17 changed files with 1481 additions and 929 deletions

View File

@@ -56,7 +56,10 @@ D3D12WindowRenderLoopResizeResult D3D12WindowRenderLoop::ApplyResize(UINT width,
}
m_uiRenderer->Resize(width, height);
m_uiRenderer->DetachWindowRenderer();
const bool hadViewportSurfacePresentation = m_uiRenderer->HasAttachedWindowRenderer();
if (hadViewportSurfacePresentation) {
m_uiRenderer->ReleaseWindowRendererBackBufferTargets();
}
const bool resizedWindowRenderer =
m_windowRenderer->Resize(static_cast<int>(width), static_cast<int>(height));
@@ -68,6 +71,28 @@ D3D12WindowRenderLoopResizeResult D3D12WindowRenderLoop::ApplyResize(UINT width,
}
if (!resizedWindowRenderer) {
if (hadViewportSurfacePresentation) {
result.hasViewportSurfacePresentation =
m_uiRenderer->RebuildWindowRendererBackBufferTargets();
if (!result.hasViewportSurfacePresentation) {
const D3D12WindowRenderLoopAttachResult attachResult =
Attach(*m_uiRenderer, *m_windowRenderer);
result.hasViewportSurfacePresentation = attachResult.hasViewportSurfacePresentation;
result.interopWarning = attachResult.interopWarning;
}
}
return result;
}
if (hadViewportSurfacePresentation) {
result.hasViewportSurfacePresentation =
m_uiRenderer->RebuildWindowRendererBackBufferTargets();
if (!result.hasViewportSurfacePresentation) {
const D3D12WindowRenderLoopAttachResult attachResult =
Attach(*m_uiRenderer, *m_windowRenderer);
result.hasViewportSurfacePresentation = attachResult.hasViewportSurfacePresentation;
result.interopWarning = attachResult.interopWarning;
}
return result;
}