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