73 lines
2.7 KiB
C++
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
|
|
|