From 8cdec15fa64c365260660039373080762dbefe0d Mon Sep 17 00:00:00 2001 From: Wojtek Figat Date: Fri, 27 Jun 2025 15:41:48 +0200 Subject: [PATCH] Fix `GlobalSignDistanceFieldCustomBuffer` to be thread-safe (scene rendering events are not guarded via mutex anymore) --- Source/Engine/Renderer/GlobalSignDistanceFieldPass.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Source/Engine/Renderer/GlobalSignDistanceFieldPass.cpp b/Source/Engine/Renderer/GlobalSignDistanceFieldPass.cpp index a46568f97..56dd196a5 100644 --- a/Source/Engine/Renderer/GlobalSignDistanceFieldPass.cpp +++ b/Source/Engine/Renderer/GlobalSignDistanceFieldPass.cpp @@ -197,6 +197,7 @@ public: GPUTexture* Texture = nullptr; GPUTexture* TextureMip = nullptr; Vector3 Origin = Vector3::Zero; + ConcurrentSystemLocker Locker; Array> Cascades; HashSet ObjectTypes; HashSet SDFTextures; @@ -395,6 +396,7 @@ public: { if (GLOBAL_SDF_ACTOR_IS_STATIC(a) && ObjectTypes.Contains(a->GetTypeHandle())) { + ConcurrentSystemLocker::WriteScope lock(Locker); OnSceneRenderingDirty(a->GetBox()); } } @@ -403,6 +405,7 @@ public: { if (GLOBAL_SDF_ACTOR_IS_STATIC(a) && ObjectTypes.Contains(a->GetTypeHandle())) { + ConcurrentSystemLocker::WriteScope lock(Locker); OnSceneRenderingDirty(BoundingBox::FromSphere(prevBounds)); OnSceneRenderingDirty(a->GetBox()); } @@ -412,6 +415,7 @@ public: { if (GLOBAL_SDF_ACTOR_IS_STATIC(a) && ObjectTypes.Contains(a->GetTypeHandle())) { + ConcurrentSystemLocker::WriteScope lock(Locker); OnSceneRenderingDirty(a->GetBox()); } }