refactor(new_editor/app): split viewport render target cleanup
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -0,0 +1,56 @@
|
||||
#include "ViewportRenderTargets.h"
|
||||
|
||||
namespace XCEngine::UI::Editor::App {
|
||||
|
||||
namespace {
|
||||
|
||||
template <typename ResourceType>
|
||||
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
|
||||
@@ -4,17 +4,6 @@ namespace XCEngine::UI::Editor::App {
|
||||
|
||||
namespace {
|
||||
|
||||
template <typename ResourceType>
|
||||
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
|
||||
|
||||
Reference in New Issue
Block a user