diff --git a/include/Nazara/Graphics/ForwardFramePipeline.hpp b/include/Nazara/Graphics/ForwardFramePipeline.hpp index c21cd55f0..749db55fd 100644 --- a/include/Nazara/Graphics/ForwardFramePipeline.hpp +++ b/include/Nazara/Graphics/ForwardFramePipeline.hpp @@ -108,6 +108,7 @@ namespace Nz const InstancedRenderable* renderable; Recti scissorBox; UInt32 renderMask = 0; + UInt8 generation; NazaraSlot(InstancedRenderable, OnElementInvalidated, onElementInvalidated); NazaraSlot(InstancedRenderable, OnMaterialInvalidated, onMaterialInvalidated); @@ -169,6 +170,7 @@ namespace Nz MemoryPool m_viewerPool; MemoryPool m_worldInstances; RenderFrame* m_currentRenderFrame; + UInt8 m_generationCounter; bool m_rebuildFrameGraph; }; } diff --git a/src/Nazara/Graphics/ForwardFramePipeline.cpp b/src/Nazara/Graphics/ForwardFramePipeline.cpp index 93cf46a56..8a53f3021 100644 --- a/src/Nazara/Graphics/ForwardFramePipeline.cpp +++ b/src/Nazara/Graphics/ForwardFramePipeline.cpp @@ -34,6 +34,7 @@ namespace Nz m_skeletonInstances(1024), m_viewerPool(8), m_worldInstances(2048), + m_generationCounter(0), m_rebuildFrameGraph(true) { } @@ -76,7 +77,7 @@ namespace Nz else visibleRenderable.skeletonInstance = nullptr; - visibilityHash = CombineHash(visibilityHash, std::hash()(&renderableData)); + visibilityHash = CombineHash(visibilityHash, std::hash()(&renderableData) + renderableData.generation); } return m_visibleRenderables; @@ -148,6 +149,7 @@ namespace Nz { std::size_t renderableIndex; RenderableData* renderableData = m_renderablePool.Allocate(renderableIndex); + renderableData->generation = m_generationCounter++; renderableData->renderable = instancedRenderable; renderableData->renderMask = renderMask; renderableData->scissorBox = scissorBox;