diff --git a/NazaraModuleTemplate/src/Nazara/ModuleName/ModuleName.cpp b/NazaraModuleTemplate/src/Nazara/ModuleName/ModuleName.cpp index ee017af96..8c2f8df20 100644 --- a/NazaraModuleTemplate/src/Nazara/ModuleName/ModuleName.cpp +++ b/NazaraModuleTemplate/src/Nazara/ModuleName/ModuleName.cpp @@ -35,10 +35,17 @@ bool NzModuleName::IsInitialized() void NzModuleName::Uninitialize() { - if (--s_moduleReferenceCounter != 0) - return; // Encore utilisé + if (s_moduleReferenceCounter != 1) + { + // Le module est soit encore utilisé, soit pas initialisé + if (s_moduleReferenceCounter > 1) + s_moduleReferenceCounter--; + + return; + } // Libération du module + s_moduleReferenceCounter = 0; NazaraNotice("Uninitialized: ModuleName module"); diff --git a/src/Nazara/3D/3D.cpp b/src/Nazara/3D/3D.cpp index 1901032e1..8e0178ea7 100644 --- a/src/Nazara/3D/3D.cpp +++ b/src/Nazara/3D/3D.cpp @@ -35,10 +35,17 @@ bool Nz3D::IsInitialized() void Nz3D::Uninitialize() { - if (--s_moduleReferenceCounter != 0) - return; // Encore utilisé + if (s_moduleReferenceCounter != 1) + { + // Le module est soit encore utilisé, soit pas initialisé + if (s_moduleReferenceCounter > 1) + s_moduleReferenceCounter--; + + return; + } // Libération du module + s_moduleReferenceCounter = 0; NazaraNotice("Uninitialized: 3D module"); diff --git a/src/Nazara/Audio/Audio.cpp b/src/Nazara/Audio/Audio.cpp index 235ba4d2f..2d14bd59f 100644 --- a/src/Nazara/Audio/Audio.cpp +++ b/src/Nazara/Audio/Audio.cpp @@ -253,13 +253,22 @@ void NzAudio::SetSpeedOfSound(float speed) void NzAudio::Uninitialize() { - if (--s_moduleReferenceCounter != 0) - return; // Encore utilisé + if (s_moduleReferenceCounter != 1) + { + // Le module est soit encore utilisé, soit pas initialisé + if (s_moduleReferenceCounter > 1) + s_moduleReferenceCounter--; + + return; + } + + // Libération du module + s_moduleReferenceCounter = 0; // Loaders NzLoaders_sndfile_Unregister(); - // Libération du module + // Libération d'OpenAL alcMakeContextCurrent(nullptr); alcDestroyContext(context); diff --git a/src/Nazara/Core/Core.cpp b/src/Nazara/Core/Core.cpp index d4e64f4f7..cdac6d7a4 100644 --- a/src/Nazara/Core/Core.cpp +++ b/src/Nazara/Core/Core.cpp @@ -29,10 +29,18 @@ bool NzCore::IsInitialized() void NzCore::Uninitialize() { - if (--s_moduleReferenceCounter != 0) - return; // Encore utilisé + if (s_moduleReferenceCounter != 1) + { + // Le module est soit encore utilisé, soit pas initialisé + if (s_moduleReferenceCounter > 1) + s_moduleReferenceCounter--; + + return; + } // Libération du module + s_moduleReferenceCounter = 0; + NazaraNotice("Uninitialized: Core"); } diff --git a/src/Nazara/Noise/Noise.cpp b/src/Nazara/Noise/Noise.cpp index 08d75ac0f..5e7c58067 100644 --- a/src/Nazara/Noise/Noise.cpp +++ b/src/Nazara/Noise/Noise.cpp @@ -35,10 +35,17 @@ bool NzNoise::IsInitialized() void NzNoise::Uninitialize() { - if (--s_moduleReferenceCounter != 0) - return; // Encore utilisé + if (s_moduleReferenceCounter != 1) + { + // Le module est soit encore utilisé, soit pas initialisé + if (s_moduleReferenceCounter > 1) + s_moduleReferenceCounter--; + + return; + } // Libération du module + s_moduleReferenceCounter = 0; // Libération des dépendances NzCore::Uninitialize(); diff --git a/src/Nazara/Renderer/Renderer.cpp b/src/Nazara/Renderer/Renderer.cpp index 52d99e6c0..6c3f9d705 100644 --- a/src/Nazara/Renderer/Renderer.cpp +++ b/src/Nazara/Renderer/Renderer.cpp @@ -986,8 +986,17 @@ void NzRenderer::SetViewport(const NzRectui& viewport) void NzRenderer::Uninitialize() { - if (--s_moduleReferenceCounter != 0) - return; // Encore utilisé + if (s_moduleReferenceCounter != 1) + { + // Le module est soit encore utilisé, soit pas initialisé + if (s_moduleReferenceCounter > 1) + s_moduleReferenceCounter--; + + return; + } + + // Libération du module + s_moduleReferenceCounter = 0; // Loaders NzLoaders_Texture_Unregister(); @@ -996,7 +1005,6 @@ void NzRenderer::Uninitialize() NzDebugDrawer::Uninitialize(); #endif - // Libération du module NzContext::EnsureContext(); // Libération des VAOs diff --git a/src/Nazara/Utility/Utility.cpp b/src/Nazara/Utility/Utility.cpp index 8ebc67384..42d0dec92 100644 --- a/src/Nazara/Utility/Utility.cpp +++ b/src/Nazara/Utility/Utility.cpp @@ -78,10 +78,18 @@ bool NzUtility::IsInitialized() void NzUtility::Uninitialize() { - if (--s_moduleReferenceCounter != 0) - return; // Encore utilisé + if (s_moduleReferenceCounter != 1) + { + // Le module est soit encore utilisé, soit pas initialisé + if (s_moduleReferenceCounter > 1) + s_moduleReferenceCounter--; + + return; + } // Libération du module + s_moduleReferenceCounter = 0; + NzLoaders_MD2_Unregister(); NzLoaders_MD5Mesh_Unregister(); NzLoaders_PCX_Unregister();