From c359c6925edc38c5989c0935f09c676d37ba42aa Mon Sep 17 00:00:00 2001 From: Lynix Date: Tue, 19 Jan 2016 12:14:07 +0100 Subject: [PATCH] Graphics/SpriteLibrary: Fix missing initialization/uninitialization (fixes crash at exit) Former-commit-id: c7bbd781d163a8456f1fadd0f71451adc5a1bd1a --- include/Nazara/Graphics/Sprite.hpp | 6 ++++++ src/Nazara/Graphics/Graphics.cpp | 8 ++++++++ src/Nazara/Graphics/Sprite.cpp | 16 ++++++++++++++++ 3 files changed, 30 insertions(+) diff --git a/include/Nazara/Graphics/Sprite.hpp b/include/Nazara/Graphics/Sprite.hpp index e61f19840..3660bf872 100644 --- a/include/Nazara/Graphics/Sprite.hpp +++ b/include/Nazara/Graphics/Sprite.hpp @@ -23,6 +23,9 @@ namespace Nz class NAZARA_GRAPHICS_API Sprite : public InstancedRenderable { + friend SpriteLibrary; + friend class Graphics; + public: inline Sprite(); inline Sprite(MaterialRef material); @@ -57,6 +60,9 @@ namespace Nz void MakeBoundingVolume() const override; void UpdateData(InstanceData* instanceData) const override; + static bool Initialize(); + static void Uninitialize(); + Color m_color; MaterialRef m_material; Rectf m_textureCoords; diff --git a/src/Nazara/Graphics/Graphics.cpp b/src/Nazara/Graphics/Graphics.cpp index 7560573ef..a96f2f4e7 100644 --- a/src/Nazara/Graphics/Graphics.cpp +++ b/src/Nazara/Graphics/Graphics.cpp @@ -18,6 +18,7 @@ #include #include #include +#include #include #include #include @@ -89,6 +90,12 @@ namespace Nz return false; } + if (!Sprite::Initialize()) + { + NazaraError("Failed to initialize sprites"); + return false; + } + // Loaders Loaders::RegisterOBJ(); @@ -181,6 +188,7 @@ namespace Nz ParticleController::Uninitialize(); Material::Uninitialize(); SkyboxBackground::Uninitialize(); + Sprite::Uninitialize(); NazaraNotice("Uninitialized: Graphics module"); diff --git a/src/Nazara/Graphics/Sprite.cpp b/src/Nazara/Graphics/Sprite.cpp index 970254294..fd4ab758f 100644 --- a/src/Nazara/Graphics/Sprite.cpp +++ b/src/Nazara/Graphics/Sprite.cpp @@ -51,5 +51,21 @@ namespace Nz *texCoordPtr++ = m_textureCoords.GetCorner(RectCorner_RightBottom); } + bool Sprite::Initialize() + { + if (!SpriteLibrary::Initialize()) + { + NazaraError("Failed to initialise library"); + return false; + } + + return true; + } + + void Sprite::Uninitialize() + { + SpriteLibrary::Uninitialize(); + } + SpriteLibrary::LibraryMap Sprite::s_library; }