From 07371ddfdfe67a6ddf1ed25f558d39dcd42caa64 Mon Sep 17 00:00:00 2001 From: Ari Vuollet Date: Sat, 8 Jun 2024 19:20:28 +0300 Subject: [PATCH] Fix crash when PhysicsMaterial asset is reloaded in editor --- Source/Engine/Physics/PhysX/PhysicsBackendPhysX.cpp | 10 ++++++++++ Source/Engine/Physics/Physics.cpp | 2 +- Source/Engine/Physics/PhysicsBackend.h | 1 + Source/Engine/Physics/PhysicsBackendEmpty.cpp | 4 ++++ 4 files changed, 16 insertions(+), 1 deletion(-) diff --git a/Source/Engine/Physics/PhysX/PhysicsBackendPhysX.cpp b/Source/Engine/Physics/PhysX/PhysicsBackendPhysX.cpp index 8824abdfa..80d264857 100644 --- a/Source/Engine/Physics/PhysX/PhysicsBackendPhysX.cpp +++ b/Source/Engine/Physics/PhysX/PhysicsBackendPhysX.cpp @@ -4474,6 +4474,16 @@ void PhysicsBackend::DestroyController(void* controller) controllerPhysX->release(); } +void PhysicsBackend::DestroyMaterial(void* material) +{ + ASSERT_LOW_LAYER(material); + auto materialPhysX = (PxMaterial*)material; + materialPhysX->userData = nullptr; + FlushLocker.Lock(); + DeleteObjects.Add(materialPhysX); + FlushLocker.Unlock(); +} + void PhysicsBackend::DestroyObject(void* object) { ASSERT_LOW_LAYER(object); diff --git a/Source/Engine/Physics/Physics.cpp b/Source/Engine/Physics/Physics.cpp index 4a16b4923..a1a5e8db2 100644 --- a/Source/Engine/Physics/Physics.cpp +++ b/Source/Engine/Physics/Physics.cpp @@ -81,7 +81,7 @@ void PhysicsSettings::Deserialize(DeserializeStream& stream, ISerializeModifier* PhysicalMaterial::~PhysicalMaterial() { if (_material) - PhysicsBackend::DestroyObject(_material); + PhysicsBackend::DestroyMaterial(_material); } bool PhysicsService::Init() diff --git a/Source/Engine/Physics/PhysicsBackend.h b/Source/Engine/Physics/PhysicsBackend.h index 8bd493267..f070a7bfb 100644 --- a/Source/Engine/Physics/PhysicsBackend.h +++ b/Source/Engine/Physics/PhysicsBackend.h @@ -314,6 +314,7 @@ public: static void DestroyShape(void* shape); static void DestroyJoint(void* joint); static void DestroyController(void* controller); + static void DestroyMaterial(void* material); static void DestroyObject(void* object); static void RemoveCollider(PhysicsColliderActor* collider); static void RemoveJoint(Joint* joint); diff --git a/Source/Engine/Physics/PhysicsBackendEmpty.cpp b/Source/Engine/Physics/PhysicsBackendEmpty.cpp index 941813b2e..566c40303 100644 --- a/Source/Engine/Physics/PhysicsBackendEmpty.cpp +++ b/Source/Engine/Physics/PhysicsBackendEmpty.cpp @@ -865,6 +865,10 @@ void PhysicsBackend::DestroyController(void* controller) { } +void PhysicsBackend::DestroyMaterial(void* material) +{ +} + void PhysicsBackend::DestroyObject(void* object) { }