#pragma once #include "Rendering/Host/HostFwd.h" #include "ViewportRenderTargetUtils.h" #include #include #include #include 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; ::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; std::uint64_t objectIdFrameSerial = 0u; }; ViewportResourceReuseQuery BuildViewportRenderTargetsReuseQuery( const ViewportResourceRequirements& requirements, 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 CreateTargets( const ViewportResourceRequirements& requirements, std::uint32_t width, std::uint32_t height, ::XCEngine::RHI::RHIDevice& device, Rendering::Host::ViewportRenderHost& renderHost, ViewportRenderTargets& targets) const; void DestroyTargets( Rendering::Host::ViewportRenderHost* renderHost, ViewportRenderTargets& targets) const; }; } // namespace XCEngine::UI::Editor::App