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

73 lines
2.7 KiB
C++

#pragma once
#include "Host/HostFwd.h"
#include "ViewportRenderTargetInternal.h"
#include <XCEngine/RHI/RHIDevice.h>
#include <XCEngine/RHI/RHIResourceView.h>
#include <XCEngine/RHI/RHITexture.h>
#include <XCEngine/UI/Types.h>
#ifndef NOMINMAX
#define NOMINMAX
#endif
#include <d3d12.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::ShaderResourceDescriptorAllocator& textureDescriptorAllocator,
ViewportRenderTargets& targets) const;
void DestroyTargets(
Host::ShaderResourceDescriptorAllocator* textureDescriptorAllocator,
ViewportRenderTargets& targets) const;
};
} // namespace XCEngine::UI::Editor::App