57 lines
2.0 KiB
C++
57 lines
2.0 KiB
C++
#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
|