diff --git a/SDK/include/NDK/Components/GraphicsComponent.hpp b/SDK/include/NDK/Components/GraphicsComponent.hpp index cd2900d7f..83afc22f1 100644 --- a/SDK/include/NDK/Components/GraphicsComponent.hpp +++ b/SDK/include/NDK/Components/GraphicsComponent.hpp @@ -74,6 +74,7 @@ namespace Ndk void ConnectInstancedRenderableSignals(Renderable& renderable); + inline void ForceCullingInvalidation(); inline void InvalidateAABB() const; void InvalidateRenderableData(const Nz::InstancedRenderable* renderable, Nz::UInt32 flags, std::size_t index); void InvalidateRenderableMaterial(const Nz::InstancedRenderable* renderable, std::size_t skinIndex, std::size_t matIndex, const Nz::MaterialRef& newMat); diff --git a/SDK/include/NDK/Components/GraphicsComponent.inl b/SDK/include/NDK/Components/GraphicsComponent.inl index 71adf64d4..f7cfb07ba 100644 --- a/SDK/include/NDK/Components/GraphicsComponent.inl +++ b/SDK/include/NDK/Components/GraphicsComponent.inl @@ -93,6 +93,8 @@ namespace Ndk UnregisterMaterial(renderable->GetMaterial(i)); m_renderables.erase(it); + + ForceCullingInvalidation(); break; } } @@ -255,6 +257,12 @@ namespace Ndk * \brief Invalidates the bounding volume */ + inline void GraphicsComponent::ForceCullingInvalidation() + { + for (CullingBoxEntry& entry : m_cullingBoxEntries) + entry.listEntry.ForceInvalidation(); //< Invalidate render queues + } + inline void GraphicsComponent::InvalidateAABB() const { m_boundingVolumesUpdated = false; diff --git a/SDK/src/NDK/Components/GraphicsComponent.cpp b/SDK/src/NDK/Components/GraphicsComponent.cpp index fb4d6920b..5182e2d2d 100644 --- a/SDK/src/NDK/Components/GraphicsComponent.cpp +++ b/SDK/src/NDK/Components/GraphicsComponent.cpp @@ -89,6 +89,7 @@ namespace Ndk RegisterMaterial(entry.renderable->GetMaterial(i)); InvalidateAABB(); + ForceCullingInvalidation(); } void GraphicsComponent::ConnectInstancedRenderableSignals(Renderable& entry) @@ -110,8 +111,7 @@ namespace Ndk r.dataUpdated = false; r.renderable->InvalidateData(&r.data, flags); - for (CullingBoxEntry& entry : m_cullingBoxEntries) - entry.listEntry.ForceInvalidation(); + ForceCullingInvalidation(); } void GraphicsComponent::InvalidateRenderableMaterial(const Nz::InstancedRenderable* renderable, std::size_t skinIndex, std::size_t matIndex, const Nz::MaterialRef& newMat) @@ -265,8 +265,7 @@ namespace Ndk InvalidateAABB(); InvalidateTransformMatrix(); - for (CullingBoxEntry& entry : m_cullingBoxEntries) - entry.listEntry.ForceInvalidation(); //< Force invalidation on movement + ForceCullingInvalidation(); //< Force invalidation on movement for now (FIXME) } void GraphicsComponent::UnregisterMaterial(Nz::Material* material)