#include "Rendering/Viewport/ViewportRenderTargetInternal.h" #include #include namespace XCEngine::UI::Editor::App { bool ViewportRequiresObjectIdResources(ViewportKind kind) { return kind == ViewportKind::Scene; } std::uint32_t ClampViewportPixelCoordinate(float value, std::uint32_t extent) { if (extent == 0u) { return 0u; } const float maxCoordinate = static_cast(extent - 1u); const float clamped = (std::max)(0.0f, (std::min)(value, maxCoordinate)); return static_cast(std::floor(clamped)); } bool CanReuseViewportResources(const ViewportResourceReuseQuery& query) { if (query.requestedWidth == 0u || query.requestedHeight == 0u) { return false; } if (query.width != query.requestedWidth || query.height != query.requestedHeight) { return false; } if (!query.resources.hasColorTexture || !query.resources.hasColorView || !query.resources.hasDepthTexture || !query.resources.hasDepthView || !query.resources.hasTextureDescriptor) { return false; } if (!ViewportRequiresObjectIdResources(query.kind)) { return true; } return query.resources.hasObjectIdTexture && query.resources.hasObjectIdDepthTexture && query.resources.hasObjectIdDepthView && query.resources.hasObjectIdView && query.resources.hasObjectIdShaderView && query.resources.hasDepthShaderView && query.resources.hasSelectionMaskTexture && query.resources.hasSelectionMaskView && query.resources.hasSelectionMaskShaderView; } ::XCEngine::RHI::TextureDesc BuildViewportTextureDesc( std::uint32_t width, std::uint32_t height, ::XCEngine::RHI::Format format) { ::XCEngine::RHI::TextureDesc desc = {}; desc.width = width; desc.height = height; desc.depth = 1; desc.mipLevels = 1; desc.arraySize = 1; desc.format = static_cast(format); desc.textureType = static_cast(::XCEngine::RHI::TextureType::Texture2D); desc.sampleCount = 1; desc.sampleQuality = 0; desc.flags = 0; return desc; } ::XCEngine::RHI::ResourceViewDesc BuildViewportTextureViewDesc( ::XCEngine::RHI::Format format) { ::XCEngine::RHI::ResourceViewDesc desc = {}; desc.format = static_cast(format); desc.dimension = ::XCEngine::RHI::ResourceViewDimension::Texture2D; return desc; } ::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::Rendering::RenderSurface surface(width, height); surface.SetColorAttachment(colorView); surface.SetDepthAttachment(depthView); surface.SetColorStateBefore(colorStateBefore); surface.SetColorStateAfter(colorStateAfter); return surface; } } // namespace XCEngine::UI::Editor::App