From 009d92252babfe41387f4486e02e8830b8b28e9c Mon Sep 17 00:00:00 2001 From: BlueRose <378100977@qq.com> Date: Thu, 26 Jun 2025 23:34:25 +0800 Subject: [PATCH] vault backup: 2025-06-26 23:34:25 --- .../ShaderWorldPlugin/ShaderWorld.md | 41 +++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/03-UnrealEngine/Rendering/RenderFeature/ShaderWorldPlugin/ShaderWorld.md b/03-UnrealEngine/Rendering/RenderFeature/ShaderWorldPlugin/ShaderWorld.md index e4ad2d8..e485c4c 100644 --- a/03-UnrealEngine/Rendering/RenderFeature/ShaderWorldPlugin/ShaderWorld.md +++ b/03-UnrealEngine/Rendering/RenderFeature/ShaderWorldPlugin/ShaderWorld.md @@ -310,6 +310,47 @@ bool AShaderWorldActor::SetupCollisions() } ``` +#### CollisionFinalizeWork() +```c++ +bool AShaderWorldActor::CollisionFinalizeWork() +{ + SCOPED_NAMED_EVENT_TEXT("AShaderWorldActor::CollisionFinalizeWork()", FColor::Magenta); + SW_FCT_CYCLE() + + if (!CollisionReadToProcess.IsEmpty()) + return true; + + const double GameThreadBudget_ms = SWGameThreadBudgetCollision_ms.GetValueOnGameThread(); + + double TimeStart = FPlatformTime::Seconds(); + + if(CollisionWorkQueue.Num()<=0) + return true; + + { + FScopeLock CollisionMeshArrayAccess(&CollisionMeshAccessLock); + for (int i = CollisionWorkQueue.Num() - 1; i >= 0; i--) + { + if ((FPlatformTime::Seconds() - TimeStart) * 1000.0 > GameThreadBudget_ms) + return false; + + FCollisionProcessingWork& Work = CollisionWorkQueue[i]; + + ensure(CollisionMesh.Find(Work.MeshID)); + + FCollisionMeshElement& Mesh = CollisionMesh[Work.MeshID]; + + Mesh.Mesh->UpdateSectionTriMesh(Work.DestB); + + CollisionWorkQueue.RemoveAt(i); + } + } + + CollisionWorkQueue.Empty(); + return true; + +} +``` ### SpawnablesManagement() ### TerrainAndSpawnablesManagement()