From e95bdb314930b407cc6b8965fdaba2ff342bed6b Mon Sep 17 00:00:00 2001 From: ssdfasd <2156608475@qq.com> Date: Wed, 15 Apr 2026 10:40:37 +0800 Subject: [PATCH] refactor(new_editor/app): split viewport render target cleanup --- new_editor/CMakeLists.txt | 1 + .../ViewportRenderTargetManagerCleanup.cpp | 56 +++++++++++++++++++ .../ViewportRenderTargetManagerResources.cpp | 43 -------------- 3 files changed, 57 insertions(+), 43 deletions(-) create mode 100644 new_editor/app/Rendering/Viewport/ViewportRenderTargetManagerCleanup.cpp diff --git a/new_editor/CMakeLists.txt b/new_editor/CMakeLists.txt index 5c301a0d..c9662396 100644 --- a/new_editor/CMakeLists.txt +++ b/new_editor/CMakeLists.txt @@ -266,6 +266,7 @@ if(XCENGINE_BUILD_XCUI_EDITOR_APP) app/Rendering/Viewport/ViewportHostServiceFrame.cpp app/Rendering/Viewport/ViewportHostServiceLifecycle.cpp app/Rendering/Viewport/ViewportRenderTargetManager.cpp + app/Rendering/Viewport/ViewportRenderTargetManagerCleanup.cpp app/Rendering/Viewport/ViewportRenderTargetManagerResources.cpp app/Rendering/Viewport/ViewportRenderTargetManagerSurfaces.cpp app/Rendering/Viewport/ViewportRenderTargets.cpp diff --git a/new_editor/app/Rendering/Viewport/ViewportRenderTargetManagerCleanup.cpp b/new_editor/app/Rendering/Viewport/ViewportRenderTargetManagerCleanup.cpp new file mode 100644 index 00000000..9637e0aa --- /dev/null +++ b/new_editor/app/Rendering/Viewport/ViewportRenderTargetManagerCleanup.cpp @@ -0,0 +1,56 @@ +#include "ViewportRenderTargets.h" + +namespace XCEngine::UI::Editor::App { + +namespace { + +template +void ShutdownAndDeleteViewportResource(ResourceType*& resource) { + if (resource == nullptr) { + return; + } + + resource->Shutdown(); + delete resource; + resource = nullptr; +} + +void ResetViewportTargetMetadata(ViewportRenderTargets& targets) { + targets.width = 0; + targets.height = 0; + targets.srvCpuHandle = {}; + targets.srvGpuHandle = {}; + targets.textureHandle = {}; + targets.colorState = ::XCEngine::RHI::ResourceStates::Common; + targets.objectIdState = ::XCEngine::RHI::ResourceStates::Common; + targets.selectionMaskState = ::XCEngine::RHI::ResourceStates::Common; + targets.hasValidObjectIdFrame = false; +} + +} // namespace + +void ViewportRenderTargetManager::DestroyTargets( + Host::D3D12ShaderResourceDescriptorAllocator* textureDescriptorAllocator, + ViewportRenderTargets& targets) const { + if (textureDescriptorAllocator != nullptr && targets.srvCpuHandle.ptr != 0) { + textureDescriptorAllocator->Free(targets.srvCpuHandle, targets.srvGpuHandle); + } + + ShutdownAndDeleteViewportResource(targets.objectIdView); + ShutdownAndDeleteViewportResource(targets.objectIdShaderView); + ShutdownAndDeleteViewportResource(targets.objectIdDepthView); + ShutdownAndDeleteViewportResource(targets.objectIdDepthTexture); + ShutdownAndDeleteViewportResource(targets.objectIdTexture); + ShutdownAndDeleteViewportResource(targets.selectionMaskView); + ShutdownAndDeleteViewportResource(targets.selectionMaskShaderView); + ShutdownAndDeleteViewportResource(targets.selectionMaskTexture); + ShutdownAndDeleteViewportResource(targets.depthShaderView); + ShutdownAndDeleteViewportResource(targets.depthView); + ShutdownAndDeleteViewportResource(targets.depthTexture); + ShutdownAndDeleteViewportResource(targets.colorView); + ShutdownAndDeleteViewportResource(targets.colorTexture); + + ResetViewportTargetMetadata(targets); +} + +} // namespace XCEngine::UI::Editor::App diff --git a/new_editor/app/Rendering/Viewport/ViewportRenderTargetManagerResources.cpp b/new_editor/app/Rendering/Viewport/ViewportRenderTargetManagerResources.cpp index 7255cc0d..053ffbdb 100644 --- a/new_editor/app/Rendering/Viewport/ViewportRenderTargetManagerResources.cpp +++ b/new_editor/app/Rendering/Viewport/ViewportRenderTargetManagerResources.cpp @@ -4,17 +4,6 @@ namespace XCEngine::UI::Editor::App { namespace { -template -void ShutdownAndDeleteViewportResource(ResourceType*& resource) { - if (resource == nullptr) { - return; - } - - resource->Shutdown(); - delete resource; - resource = nullptr; -} - bool CreateViewportColorResources( ::XCEngine::RHI::RHIDevice& device, ViewportRenderTargets& targets) { @@ -174,36 +163,4 @@ bool ViewportRenderTargetManager::EnsureTargets( return true; } -void ViewportRenderTargetManager::DestroyTargets( - Host::D3D12ShaderResourceDescriptorAllocator* textureDescriptorAllocator, - ViewportRenderTargets& targets) const { - if (textureDescriptorAllocator != nullptr && targets.srvCpuHandle.ptr != 0) { - textureDescriptorAllocator->Free(targets.srvCpuHandle, targets.srvGpuHandle); - } - - ShutdownAndDeleteViewportResource(targets.objectIdView); - ShutdownAndDeleteViewportResource(targets.objectIdShaderView); - ShutdownAndDeleteViewportResource(targets.objectIdDepthView); - ShutdownAndDeleteViewportResource(targets.objectIdDepthTexture); - ShutdownAndDeleteViewportResource(targets.objectIdTexture); - ShutdownAndDeleteViewportResource(targets.selectionMaskView); - ShutdownAndDeleteViewportResource(targets.selectionMaskShaderView); - ShutdownAndDeleteViewportResource(targets.selectionMaskTexture); - ShutdownAndDeleteViewportResource(targets.depthShaderView); - ShutdownAndDeleteViewportResource(targets.depthView); - ShutdownAndDeleteViewportResource(targets.depthTexture); - ShutdownAndDeleteViewportResource(targets.colorView); - ShutdownAndDeleteViewportResource(targets.colorTexture); - - targets.width = 0; - targets.height = 0; - targets.srvCpuHandle = {}; - targets.srvGpuHandle = {}; - targets.textureHandle = {}; - targets.colorState = ::XCEngine::RHI::ResourceStates::Common; - targets.objectIdState = ::XCEngine::RHI::ResourceStates::Common; - targets.selectionMaskState = ::XCEngine::RHI::ResourceStates::Common; - targets.hasValidObjectIdFrame = false; -} - } // namespace XCEngine::UI::Editor::App