From b62b79a63bf8d4387d84dfbb7a0d365406778e27 Mon Sep 17 00:00:00 2001
From: D-AIRY <admin@ds-servers.com>
Date: Sun, 13 Dec 2020 01:15:10 +0300
Subject: [PATCH] Do not update visibility for cached lights

---
 source/light/LightSystem.cpp | 2 +-
 source/light/ShadowCache.h   | 4 ++++
 source/light/light.h         | 4 ++++
 3 files changed, 9 insertions(+), 1 deletion(-)

diff --git a/source/light/LightSystem.cpp b/source/light/LightSystem.cpp
index 63724c999..4e3a3d838 100644
--- a/source/light/LightSystem.cpp
+++ b/source/light/LightSystem.cpp
@@ -584,7 +584,7 @@ void XMETHODCALLTYPE CLightSystem::updateVisibility()
 
 	for(UINT i = 0, l = m_aLights.size(); i < l; ++i)
 	{
-		if(m_aLights[i]->isEnabled())
+		if(m_aLights[i]->isEnabled() && m_aLights[i]->isDirty(LRT_ALL))
 		{
 			m_aLights[i]->updateVisibility(m_pMainCamera, vLPVmin, vLPVmax, iCascades > 0);
 		}
diff --git a/source/light/ShadowCache.h b/source/light/ShadowCache.h
index 5e20f66c6..52c444ac0 100644
--- a/source/light/ShadowCache.h
+++ b/source/light/ShadowCache.h
@@ -205,6 +205,10 @@ protected:
 			{
 				m_aMapsQueue[uMap]->isDirty = true;
 				m_aMapsQueue[uMap]->shouldProcess = true;
+				if(m_aMapsQueue[uMap]->pLight)
+				{
+					m_aMapsQueue[uMap]->pLight->markDirty(m_renderType);
+				}
 				m_aMapsQueue[uMap]->pLight = m_aFrameLights[i];
 				m_aFrameLights.erase(i);
 				return(true);
diff --git a/source/light/light.h b/source/light/light.h
index 5f2232531..4aef10266 100644
--- a/source/light/light.h
+++ b/source/light/light.h
@@ -81,6 +81,10 @@ public:
 	{
 		m_dirty &= ~type;
 	}
+	void markDirty(LIGHT_RENDER_TYPE type)
+	{
+		m_dirty |= type;
+	}
 
 protected:
 	virtual SMMATRIX getWorldTM();
-- 
GitLab