Physics/Geom: Fix missing initialization/uninitialization (fixes crash at exit)

Former-commit-id: 94e4ec331cd559ba4a2680f36325f25a7d2333f2
This commit is contained in:
Lynix 2016-01-19 12:15:17 +01:00
parent c359c6925e
commit df7d736b23
3 changed files with 30 additions and 0 deletions

View File

@ -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<PhysWorld*, NewtonCollision*> m_handles;
static PhysGeomLibrary::LibraryMap s_library;

View File

@ -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 **********************************/

View File

@ -7,6 +7,7 @@
#include <Nazara/Core/Error.hpp>
#include <Nazara/Core/Log.hpp>
#include <Nazara/Physics/Config.hpp>
#include <Nazara/Physics/Geom.hpp>
#include <Newton/Newton.h>
#include <Nazara/Physics/Debug.hpp>
@ -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");