#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