Graphics/ForwardFramePipeline: Fix render size mixup

This commit is contained in:
Lynix 2023-11-21 19:41:08 +01:00
parent 6268acbf04
commit a018701251
2 changed files with 13 additions and 14 deletions

View File

@ -161,6 +161,7 @@ namespace Nz
std::unordered_map<const RenderTarget*, RenderTargetData> m_renderTargets; std::unordered_map<const RenderTarget*, RenderTargetData> m_renderTargets;
std::unordered_map<MaterialInstance*, MaterialInstanceData> m_materialInstances; std::unordered_map<MaterialInstance*, MaterialInstanceData> m_materialInstances;
mutable std::vector<FramePipelinePass::VisibleRenderable> m_visibleRenderables; mutable std::vector<FramePipelinePass::VisibleRenderable> m_visibleRenderables;
std::vector<ViewerData*> m_orderedViewers;
robin_hood::unordered_set<TransferInterface*> m_transferSet; robin_hood::unordered_set<TransferInterface*> m_transferSet;
BakedFrameGraph m_bakedFrameGraph; BakedFrameGraph m_bakedFrameGraph;
Bitset<UInt64> m_activeLights; Bitset<UInt64> m_activeLights;

View File

@ -369,26 +369,22 @@ namespace Nz
} }
m_removedWorldInstances.Clear(); m_removedWorldInstances.Clear();
StackVector<Vector2ui> viewerSizes = NazaraStackVector(Vector2ui, m_viewerPool.size()); bool frameGraphInvalidated = false;
for (auto& viewerData : m_viewerPool)
{
if (viewerData.pendingDestruction)
continue;
Recti viewport = viewerData.viewer->GetViewport();
viewerSizes.emplace_back(Vector2i(viewport.width, viewport.height));
}
bool frameGraphInvalidated;
if (m_rebuildFrameGraph) if (m_rebuildFrameGraph)
{ {
renderFrame.PushForRelease(std::move(m_bakedFrameGraph)); renderFrame.PushForRelease(std::move(m_bakedFrameGraph));
m_bakedFrameGraph = BuildFrameGraph(); m_bakedFrameGraph = BuildFrameGraph();
m_bakedFrameGraph.Resize(renderFrame, viewerSizes);
frameGraphInvalidated = true; frameGraphInvalidated = true;
} }
else
frameGraphInvalidated = m_bakedFrameGraph.Resize(renderFrame, viewerSizes); StackVector<Vector2ui> 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) // Find active lights (i.e. visible in any frustum)
m_activeLights.Clear(); m_activeLights.Clear();
@ -691,6 +687,7 @@ namespace Nz
StackVector<std::size_t> dependenciesColorAttachments = NazaraStackVector(std::size_t, viewers.size()); StackVector<std::size_t> dependenciesColorAttachments = NazaraStackVector(std::size_t, viewers.size());
m_orderedViewers.clear();
m_renderTargets.clear(); m_renderTargets.clear();
unsigned int viewerIndex = 0; unsigned int viewerIndex = 0;
for (auto it = viewers.begin(), prevIt = it; it != viewers.end(); ++it) for (auto it = viewers.begin(), prevIt = it; it != viewers.end(); ++it)
@ -747,6 +744,7 @@ namespace Nz
// Group viewers by render targets // Group viewers by render targets
auto& renderTargetData = m_renderTargets[renderTarget]; auto& renderTargetData = m_renderTargets[renderTarget];
renderTargetData.viewers.push_back(viewerData); renderTargetData.viewers.push_back(viewerData);
m_orderedViewers.push_back(viewerData);
} }
for (auto&& [renderTarget, renderTargetData] : m_renderTargets) for (auto&& [renderTarget, renderTargetData] : m_renderTargets)