diff --git a/src/Nazara/3D/3D.cpp b/src/Nazara/3D/3D.cpp index 8e0178ea7..3ec86b628 100644 --- a/src/Nazara/3D/3D.cpp +++ b/src/Nazara/3D/3D.cpp @@ -18,6 +18,8 @@ bool Nz3D::Initialize() if (!NzRenderer::Initialize()) { NazaraError("Failed to initialize renderer module"); + Uninitialize(); + return false; } diff --git a/src/Nazara/Audio/Audio.cpp b/src/Nazara/Audio/Audio.cpp index 2d14bd59f..ceb66a9c2 100644 --- a/src/Nazara/Audio/Audio.cpp +++ b/src/Nazara/Audio/Audio.cpp @@ -108,6 +108,8 @@ bool NzAudio::Initialize() if (!NzCore::Initialize()) { NazaraError("Failed to initialize core module"); + Uninitialize(); + return false; } @@ -116,6 +118,8 @@ bool NzAudio::Initialize() if (!device) { NazaraError("Failed to open default device"); + Uninitialize(); + return false; } @@ -124,17 +128,16 @@ bool NzAudio::Initialize() if (!context) { NazaraError("Failed to create context"); + Uninitialize(); - alcCloseDevice(device); return false; } if (!alcMakeContextCurrent(context)) { NazaraError("Failed to activate context"); + Uninitialize(); - alcDestroyContext(context); - alcCloseDevice(device); return false; } @@ -269,12 +272,18 @@ void NzAudio::Uninitialize() NzLoaders_sndfile_Unregister(); // Libération d'OpenAL - alcMakeContextCurrent(nullptr); - alcDestroyContext(context); + if (device) + { + if (context) + { + alcMakeContextCurrent(nullptr); + alcDestroyContext(context); + } - if (!alcCloseDevice(device)) - // Nous n'avons pas pu fermer le device, ce qui signifie qu'il est en cours d'utilisation - NazaraWarning("Failed to close device"); + if (!alcCloseDevice(device)) + // Nous n'avons pas pu fermer le device, ce qui signifie qu'il est en cours d'utilisation + NazaraWarning("Failed to close device"); + } NazaraNotice("Uninitialized: Audio module"); diff --git a/src/Nazara/Core/Core.cpp b/src/Nazara/Core/Core.cpp index a2edb39af..75c143c16 100644 --- a/src/Nazara/Core/Core.cpp +++ b/src/Nazara/Core/Core.cpp @@ -22,6 +22,8 @@ bool NzCore::Initialize(bool initializeHardwareInfo, bool initializeTaskSchedule if (initializeTaskScheduler && !NzTaskScheduler::Initialize()) { NazaraError("Failed to initialize task scheduler"); + Uninitialize(); + return false; } diff --git a/src/Nazara/Noise/Noise.cpp b/src/Nazara/Noise/Noise.cpp index 5e7c58067..d99686ce9 100644 --- a/src/Nazara/Noise/Noise.cpp +++ b/src/Nazara/Noise/Noise.cpp @@ -18,6 +18,8 @@ bool NzNoise::Initialize() if (!NzCore::Initialize()) { NazaraError("Failed to initialize core module"); + Uninitialize(); + return false; } diff --git a/src/Nazara/Renderer/Renderer.cpp b/src/Nazara/Renderer/Renderer.cpp index ecf549568..14d5874b3 100644 --- a/src/Nazara/Renderer/Renderer.cpp +++ b/src/Nazara/Renderer/Renderer.cpp @@ -466,7 +466,13 @@ bool NzRenderer::Initialize(bool initializeDebugDrawer) if (initializeDebugDrawer && !NzDebugDrawer::Initialize()) NazaraWarning("Failed to initialize debug drawer"); // Non-critique - NzTextureSampler::Initialize(); + if (!NzTextureSampler::Initialize()) + { + NazaraError("Failed to initialize texture sampler"); + Uninitialize(); + + return false; + } // Loaders NzLoaders_Texture_Register(); diff --git a/src/Nazara/Utility/Utility.cpp b/src/Nazara/Utility/Utility.cpp index 42d0dec92..6f843901c 100644 --- a/src/Nazara/Utility/Utility.cpp +++ b/src/Nazara/Utility/Utility.cpp @@ -26,6 +26,8 @@ bool NzUtility::Initialize() if (!NzCore::Initialize()) { NazaraError("Failed to initialize core module"); + Uninitialize(); + return false; } @@ -33,19 +35,23 @@ bool NzUtility::Initialize() if (!NzBuffer::Initialize()) { NazaraError("Failed to initialize buffers"); + Uninitialize(); + return false; } if (!NzPixelFormat::Initialize()) { NazaraError("Failed to initialize pixel formats"); + Uninitialize(); + return false; } if (!NzWindow::Initialize()) { NazaraError("Failed to initialize window's system"); - NzPixelFormat::Uninitialize(); + Uninitialize(); return false; }