#pragma once #include "ViewportTypes.h" #include #include #include #include #include namespace XCEngine::UI::Editor::App { struct ViewportResourcePresence { bool hasColorTexture = false; bool hasColorView = false; bool hasDepthTexture = false; bool hasDepthView = false; bool hasDepthShaderView = false; bool hasObjectIdTexture = false; bool hasObjectIdDepthTexture = false; bool hasObjectIdDepthView = false; bool hasObjectIdView = false; bool hasObjectIdShaderView = false; bool hasSelectionMaskTexture = false; bool hasSelectionMaskView = false; bool hasSelectionMaskShaderView = false; bool hasTextureDescriptor = false; }; struct ViewportResourceReuseQuery { ViewportResourceRequirements requirements = {}; std::uint32_t width = 0; std::uint32_t height = 0; std::uint32_t requestedWidth = 0; std::uint32_t requestedHeight = 0; ViewportResourcePresence resources = {}; }; std::uint32_t ClampViewportPixelCoordinate(float value, std::uint32_t extent); bool CanReuseViewportResources(const ViewportResourceReuseQuery& query); ::XCEngine::RHI::TextureDesc BuildViewportTextureDesc( std::uint32_t width, std::uint32_t height, ::XCEngine::RHI::Format format); ::XCEngine::RHI::ResourceViewDesc BuildViewportTextureViewDesc( ::XCEngine::RHI::Format format); ::XCEngine::Rendering::RenderSurface BuildViewportRenderSurface( std::uint32_t width, std::uint32_t height, ::XCEngine::RHI::RHIResourceView* colorView, ::XCEngine::RHI::RHIResourceView* depthView, ::XCEngine::RHI::ResourceStates colorStateBefore, ::XCEngine::RHI::ResourceStates colorStateAfter = ::XCEngine::RHI::ResourceStates::PixelShaderResource); } // namespace XCEngine::UI::Editor::App