diff --git a/src/Nazara/Renderer/Win32/ContextImpl.cpp b/src/Nazara/Renderer/Win32/ContextImpl.cpp index ee78e81a6..1ae61bd3e 100644 --- a/src/Nazara/Renderer/Win32/ContextImpl.cpp +++ b/src/Nazara/Renderer/Win32/ContextImpl.cpp @@ -5,6 +5,7 @@ // Code inspiré de NeHe (Lesson1) et de la SFML par Laurent Gomila #include +#include #include #include #include @@ -42,11 +43,16 @@ bool NzContextImpl::Create(NzContextParameters& parameters) m_ownsWindow = true; } + // En cas d'exception, la ressource sera quand même libérée + NzCallOnExit onExit([this] () + { + Destroy(); + }); + m_deviceContext = GetDC(m_window); if (!m_deviceContext) { NazaraError("Failed to get device context"); - Destroy(); return false; } @@ -116,8 +122,6 @@ bool NzContextImpl::Create(NzContextParameters& parameters) if (pixelFormat == 0) { NazaraError("Failed to choose pixel format"); - Destroy(); - return false; } } @@ -125,7 +129,6 @@ bool NzContextImpl::Create(NzContextParameters& parameters) if (!SetPixelFormat(m_deviceContext, pixelFormat, &descriptor)) { NazaraError("Failed to set pixel format"); - Destroy(); return false; } @@ -191,10 +194,11 @@ bool NzContextImpl::Create(NzContextParameters& parameters) if (!m_context) { NazaraError("Failed to create context"); - Destroy(); return false; } + onExit.Reset(); + return true; }