diff --git a/Source/Engine/Renderer/Renderer.cpp b/Source/Engine/Renderer/Renderer.cpp index edac958bc..833daed8e 100644 --- a/Source/Engine/Renderer/Renderer.cpp +++ b/Source/Engine/Renderer/Renderer.cpp @@ -343,6 +343,7 @@ void RenderInner(SceneRenderTask* task, RenderContext& renderContext, RenderCont // Prepare renderContext.View.Prepare(renderContext); renderContext.Buffers->Prepare(); + ShadowsPass::Instance()->Prepare(); // Build batch of render contexts (main view and shadow projections) { diff --git a/Source/Engine/Renderer/ShadowsPass.cpp b/Source/Engine/Renderer/ShadowsPass.cpp index 06381d826..ba326b728 100644 --- a/Source/Engine/Renderer/ShadowsPass.cpp +++ b/Source/Engine/Renderer/ShadowsPass.cpp @@ -549,10 +549,17 @@ void ShadowsPass::Dispose() SAFE_DELETE_GPU_RESOURCE(_shadowMapCube); } +void ShadowsPass::Prepare() +{ + // Clear cached data + _shadowData.Clear(); + LastDirLightIndex = -1; + LastDirLightShadowMap = nullptr; +} + void ShadowsPass::SetupShadows(RenderContext& renderContext, RenderContextBatch& renderContextBatch) { PROFILE_CPU(); - _shadowData.Clear(); auto& view = renderContext.View; // Update shadow map diff --git a/Source/Engine/Renderer/ShadowsPass.h b/Source/Engine/Renderer/ShadowsPass.h index e58d68d62..d3589d008 100644 --- a/Source/Engine/Renderer/ShadowsPass.h +++ b/Source/Engine/Renderer/ShadowsPass.h @@ -94,6 +94,8 @@ public: LightShadowData LastDirLight; public: + void Prepare(); + /// /// Setups the shadows rendering for batched scene drawing. Checks which lights will cast a shadow. ///