From a018701251beeffcc61293dd99337f1e2621d54d Mon Sep 17 00:00:00 2001 From: Lynix Date: Tue, 21 Nov 2023 19:41:08 +0100 Subject: [PATCH] Graphics/ForwardFramePipeline: Fix render size mixup --- .../Nazara/Graphics/ForwardFramePipeline.hpp | 1 + src/Nazara/Graphics/ForwardFramePipeline.cpp | 26 +++++++++---------- 2 files changed, 13 insertions(+), 14 deletions(-) diff --git a/include/Nazara/Graphics/ForwardFramePipeline.hpp b/include/Nazara/Graphics/ForwardFramePipeline.hpp index a0836b6de..241cf62ec 100644 --- a/include/Nazara/Graphics/ForwardFramePipeline.hpp +++ b/include/Nazara/Graphics/ForwardFramePipeline.hpp @@ -161,6 +161,7 @@ namespace Nz std::unordered_map m_renderTargets; std::unordered_map m_materialInstances; mutable std::vector m_visibleRenderables; + std::vector m_orderedViewers; robin_hood::unordered_set m_transferSet; BakedFrameGraph m_bakedFrameGraph; Bitset m_activeLights; diff --git a/src/Nazara/Graphics/ForwardFramePipeline.cpp b/src/Nazara/Graphics/ForwardFramePipeline.cpp index fa6acb84f..07bf1d85d 100644 --- a/src/Nazara/Graphics/ForwardFramePipeline.cpp +++ b/src/Nazara/Graphics/ForwardFramePipeline.cpp @@ -369,26 +369,22 @@ namespace Nz } m_removedWorldInstances.Clear(); - StackVector viewerSizes = NazaraStackVector(Vector2ui, m_viewerPool.size()); - for (auto& viewerData : m_viewerPool) - { - if (viewerData.pendingDestruction) - continue; - - Recti viewport = viewerData.viewer->GetViewport(); - viewerSizes.emplace_back(Vector2i(viewport.width, viewport.height)); - } - - bool frameGraphInvalidated; + bool frameGraphInvalidated = false; if (m_rebuildFrameGraph) { renderFrame.PushForRelease(std::move(m_bakedFrameGraph)); m_bakedFrameGraph = BuildFrameGraph(); - m_bakedFrameGraph.Resize(renderFrame, viewerSizes); frameGraphInvalidated = true; } - else - frameGraphInvalidated = m_bakedFrameGraph.Resize(renderFrame, viewerSizes); + + StackVector viewerSizes = NazaraStackVector(Vector2ui, m_orderedViewers.size()); + for (ViewerData* viewerData : m_orderedViewers) + { + Recti viewport = viewerData->viewer->GetViewport(); + viewerSizes.emplace_back(Vector2i(viewport.width, viewport.height)); + } + + frameGraphInvalidated |= m_bakedFrameGraph.Resize(renderFrame, viewerSizes); // Find active lights (i.e. visible in any frustum) m_activeLights.Clear(); @@ -691,6 +687,7 @@ namespace Nz StackVector dependenciesColorAttachments = NazaraStackVector(std::size_t, viewers.size()); + m_orderedViewers.clear(); m_renderTargets.clear(); unsigned int viewerIndex = 0; for (auto it = viewers.begin(), prevIt = it; it != viewers.end(); ++it) @@ -747,6 +744,7 @@ namespace Nz // Group viewers by render targets auto& renderTargetData = m_renderTargets[renderTarget]; renderTargetData.viewers.push_back(viewerData); + m_orderedViewers.push_back(viewerData); } for (auto&& [renderTarget, renderTargetData] : m_renderTargets)