Files
XCEngine/new_editor/app/Rendering/Viewport/ViewportRenderTargets.h

68 lines
2.7 KiB
C++

#pragma once
#include "ViewportRenderTargetSupport.h"
#include <Rendering/D3D12/D3D12ShaderResourceDescriptorAllocator.h>
#include <XCEngine/RHI/RHIDevice.h>
#include <XCEngine/RHI/RHIResourceView.h>
#include <XCEngine/RHI/RHITexture.h>
#include <XCEngine/UI/Types.h>
namespace XCEngine::UI::Editor::App {
struct ViewportRenderTargets {
std::uint32_t width = 0;
std::uint32_t height = 0;
::XCEngine::RHI::RHITexture* colorTexture = nullptr;
::XCEngine::RHI::RHIResourceView* colorView = nullptr;
::XCEngine::RHI::RHITexture* depthTexture = nullptr;
::XCEngine::RHI::RHIResourceView* depthView = nullptr;
::XCEngine::RHI::RHIResourceView* depthShaderView = nullptr;
::XCEngine::RHI::RHITexture* objectIdTexture = nullptr;
::XCEngine::RHI::RHITexture* objectIdDepthTexture = nullptr;
::XCEngine::RHI::RHIResourceView* objectIdDepthView = nullptr;
::XCEngine::RHI::RHIResourceView* objectIdView = nullptr;
::XCEngine::RHI::RHIResourceView* objectIdShaderView = nullptr;
::XCEngine::RHI::RHITexture* selectionMaskTexture = nullptr;
::XCEngine::RHI::RHIResourceView* selectionMaskView = nullptr;
::XCEngine::RHI::RHIResourceView* selectionMaskShaderView = nullptr;
D3D12_CPU_DESCRIPTOR_HANDLE srvCpuHandle = {};
D3D12_GPU_DESCRIPTOR_HANDLE srvGpuHandle = {};
::XCEngine::UI::UITextureHandle textureHandle = {};
::XCEngine::RHI::ResourceStates colorState = ::XCEngine::RHI::ResourceStates::Common;
::XCEngine::RHI::ResourceStates objectIdState = ::XCEngine::RHI::ResourceStates::Common;
::XCEngine::RHI::ResourceStates selectionMaskState = ::XCEngine::RHI::ResourceStates::Common;
bool hasValidObjectIdFrame = false;
};
ViewportResourceReuseQuery BuildViewportRenderTargetsReuseQuery(
ViewportKind kind,
const ViewportRenderTargets& targets,
std::uint32_t requestedWidth,
std::uint32_t requestedHeight);
::XCEngine::Rendering::RenderSurface BuildViewportColorSurface(
const ViewportRenderTargets& targets);
::XCEngine::Rendering::RenderSurface BuildViewportObjectIdSurface(
const ViewportRenderTargets& targets);
::XCEngine::Rendering::RenderSurface BuildViewportSelectionMaskSurface(
const ViewportRenderTargets& targets);
class ViewportRenderTargetManager {
public:
bool EnsureTargets(
ViewportKind kind,
std::uint32_t width,
std::uint32_t height,
::XCEngine::RHI::RHIDevice& device,
Host::D3D12ShaderResourceDescriptorAllocator& textureDescriptorAllocator,
ViewportRenderTargets& targets) const;
void DestroyTargets(
Host::D3D12ShaderResourceDescriptorAllocator* textureDescriptorAllocator,
ViewportRenderTargets& targets) const;
};
} // namespace XCEngine::UI::Editor::App