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

67 lines
2.8 KiB
C++

#pragma once
#include "ProductViewportSurfaceUtils.h"
#include <Host/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 ProductViewportRenderTargets {
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;
};
ProductViewportResourceReuseQuery BuildProductViewportRenderTargetsReuseQuery(
ProductViewportKind kind,
const ProductViewportRenderTargets& targets,
std::uint32_t requestedWidth,
std::uint32_t requestedHeight);
::XCEngine::Rendering::RenderSurface BuildProductViewportColorSurface(
const ProductViewportRenderTargets& targets);
::XCEngine::Rendering::RenderSurface BuildProductViewportObjectIdSurface(
const ProductViewportRenderTargets& targets);
::XCEngine::Rendering::RenderSurface BuildProductViewportSelectionMaskSurface(
const ProductViewportRenderTargets& targets);
class ProductViewportRenderTargetManager {
public:
bool EnsureTargets(
ProductViewportKind kind,
std::uint32_t width,
std::uint32_t height,
::XCEngine::RHI::RHIDevice& device,
Host::D3D12ShaderResourceDescriptorAllocator& textureDescriptorAllocator,
ProductViewportRenderTargets& targets) const;
void DestroyTargets(
Host::D3D12ShaderResourceDescriptorAllocator* textureDescriptorAllocator,
ProductViewportRenderTargets& targets) const;
};
} // namespace XCEngine::UI::Editor::App