diff --git a/include/Nazara/Physics/Geom.hpp b/include/Nazara/Physics/Geom.hpp index 3e3d14164..34b6c58ba 100644 --- a/include/Nazara/Physics/Geom.hpp +++ b/include/Nazara/Physics/Geom.hpp @@ -39,6 +39,9 @@ namespace Nz class NAZARA_PHYSICS_API PhysGeom : public RefCounted { + friend PhysGeomLibrary; + friend class Physics; + public: PhysGeom() = default; PhysGeom(const PhysGeom&) = delete; @@ -64,6 +67,9 @@ namespace Nz protected: virtual NewtonCollision* CreateHandle(PhysWorld* world) const = 0; + static bool Initialize(); + static void Uninitialize(); + mutable std::unordered_map m_handles; static PhysGeomLibrary::LibraryMap s_library; diff --git a/src/Nazara/Physics/Geom.cpp b/src/Nazara/Physics/Geom.cpp index abe1b6e03..e814b8618 100644 --- a/src/Nazara/Physics/Geom.cpp +++ b/src/Nazara/Physics/Geom.cpp @@ -148,6 +148,22 @@ namespace Nz return CreateGeomFromPrimitive(list.GetPrimitive(0)); } + bool PhysGeom::Initialize() + { + if (!PhysGeomLibrary::Initialize()) + { + NazaraError("Failed to initialise library"); + return false; + } + + return true; + } + + void PhysGeom::Uninitialize() + { + PhysGeomLibrary::Uninitialize(); + } + PhysGeomLibrary::LibraryMap PhysGeom::s_library; /********************************** BoxGeom **********************************/ diff --git a/src/Nazara/Physics/Physics.cpp b/src/Nazara/Physics/Physics.cpp index 3c53ff9ad..584c334ab 100644 --- a/src/Nazara/Physics/Physics.cpp +++ b/src/Nazara/Physics/Physics.cpp @@ -7,6 +7,7 @@ #include #include #include +#include #include #include @@ -35,6 +36,11 @@ namespace Nz s_moduleReferenceCounter++; // Initialisation du module + if (!PhysGeom::Initialize()) + { + NazaraError("Failed to initialize geoms"); + return false; + } NazaraNotice("Initialized: Physics module"); return true; @@ -57,6 +63,8 @@ namespace Nz } // Libération du module + PhysGeom::Uninitialize(); + s_moduleReferenceCounter = 0; NazaraNotice("Uninitialized: Physics module");