Physics/Geom: Fix missing initialization/uninitialization (fixes crash at exit)
Former-commit-id: 94e4ec331cd559ba4a2680f36325f25a7d2333f2
This commit is contained in:
parent
c359c6925e
commit
df7d736b23
|
|
@ -39,6 +39,9 @@ namespace Nz
|
||||||
|
|
||||||
class NAZARA_PHYSICS_API PhysGeom : public RefCounted
|
class NAZARA_PHYSICS_API PhysGeom : public RefCounted
|
||||||
{
|
{
|
||||||
|
friend PhysGeomLibrary;
|
||||||
|
friend class Physics;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
PhysGeom() = default;
|
PhysGeom() = default;
|
||||||
PhysGeom(const PhysGeom&) = delete;
|
PhysGeom(const PhysGeom&) = delete;
|
||||||
|
|
@ -64,6 +67,9 @@ namespace Nz
|
||||||
protected:
|
protected:
|
||||||
virtual NewtonCollision* CreateHandle(PhysWorld* world) const = 0;
|
virtual NewtonCollision* CreateHandle(PhysWorld* world) const = 0;
|
||||||
|
|
||||||
|
static bool Initialize();
|
||||||
|
static void Uninitialize();
|
||||||
|
|
||||||
mutable std::unordered_map<PhysWorld*, NewtonCollision*> m_handles;
|
mutable std::unordered_map<PhysWorld*, NewtonCollision*> m_handles;
|
||||||
|
|
||||||
static PhysGeomLibrary::LibraryMap s_library;
|
static PhysGeomLibrary::LibraryMap s_library;
|
||||||
|
|
|
||||||
|
|
@ -148,6 +148,22 @@ namespace Nz
|
||||||
return CreateGeomFromPrimitive(list.GetPrimitive(0));
|
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;
|
PhysGeomLibrary::LibraryMap PhysGeom::s_library;
|
||||||
|
|
||||||
/********************************** BoxGeom **********************************/
|
/********************************** BoxGeom **********************************/
|
||||||
|
|
|
||||||
|
|
@ -7,6 +7,7 @@
|
||||||
#include <Nazara/Core/Error.hpp>
|
#include <Nazara/Core/Error.hpp>
|
||||||
#include <Nazara/Core/Log.hpp>
|
#include <Nazara/Core/Log.hpp>
|
||||||
#include <Nazara/Physics/Config.hpp>
|
#include <Nazara/Physics/Config.hpp>
|
||||||
|
#include <Nazara/Physics/Geom.hpp>
|
||||||
#include <Newton/Newton.h>
|
#include <Newton/Newton.h>
|
||||||
#include <Nazara/Physics/Debug.hpp>
|
#include <Nazara/Physics/Debug.hpp>
|
||||||
|
|
||||||
|
|
@ -35,6 +36,11 @@ namespace Nz
|
||||||
s_moduleReferenceCounter++;
|
s_moduleReferenceCounter++;
|
||||||
|
|
||||||
// Initialisation du module
|
// Initialisation du module
|
||||||
|
if (!PhysGeom::Initialize())
|
||||||
|
{
|
||||||
|
NazaraError("Failed to initialize geoms");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
NazaraNotice("Initialized: Physics module");
|
NazaraNotice("Initialized: Physics module");
|
||||||
return true;
|
return true;
|
||||||
|
|
@ -57,6 +63,8 @@ namespace Nz
|
||||||
}
|
}
|
||||||
|
|
||||||
// Libération du module
|
// Libération du module
|
||||||
|
PhysGeom::Uninitialize();
|
||||||
|
|
||||||
s_moduleReferenceCounter = 0;
|
s_moduleReferenceCounter = 0;
|
||||||
|
|
||||||
NazaraNotice("Uninitialized: Physics module");
|
NazaraNotice("Uninitialized: Physics module");
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue