From 9662f4167dcf84a980290cc2f2a7d3ed91a8f1af Mon Sep 17 00:00:00 2001 From: Lynix Date: Sat, 17 Jan 2015 22:55:50 +0100 Subject: [PATCH] Fixed crash on Utility uninitialisation Former-commit-id: ef9f53674fe21c4d7780e68c62f7981554663a85 --- include/Nazara/Graphics/GuillotineTextureAtlas.hpp | 2 ++ include/Nazara/Utility/AbstractAtlas.hpp | 2 ++ include/Nazara/Utility/GuillotineImageAtlas.hpp | 1 + src/Nazara/Graphics/Graphics.cpp | 4 ++++ src/Nazara/Graphics/GuillotineTextureAtlas.cpp | 5 +++++ src/Nazara/Utility/GuillotineImageAtlas.cpp | 5 +++++ 6 files changed, 19 insertions(+) diff --git a/include/Nazara/Graphics/GuillotineTextureAtlas.hpp b/include/Nazara/Graphics/GuillotineTextureAtlas.hpp index 04197a41b..fa82c8056 100644 --- a/include/Nazara/Graphics/GuillotineTextureAtlas.hpp +++ b/include/Nazara/Graphics/GuillotineTextureAtlas.hpp @@ -16,6 +16,8 @@ class NAZARA_API NzGuillotineTextureAtlas : public NzGuillotineImageAtlas NzGuillotineTextureAtlas() = default; ~NzGuillotineTextureAtlas() = default; + nzUInt32 GetStorage() const; + private: NzAbstractImage* ResizeImage(NzAbstractImage* oldImage, const NzVector2ui& size) const override; }; diff --git a/include/Nazara/Utility/AbstractAtlas.hpp b/include/Nazara/Utility/AbstractAtlas.hpp index 2d290153b..3dabff1eb 100644 --- a/include/Nazara/Utility/AbstractAtlas.hpp +++ b/include/Nazara/Utility/AbstractAtlas.hpp @@ -10,6 +10,7 @@ #include #include #include +#include #include class NzAbstractImage; @@ -29,6 +30,7 @@ class NAZARA_API NzAbstractAtlas virtual void Free(NzSparsePtr rects, NzSparsePtr layers, unsigned int count) = 0; virtual NzAbstractImage* GetLayer(unsigned int layerIndex) const = 0; virtual unsigned int GetLayerCount() const = 0; + virtual nzUInt32 GetStorage() const = 0; virtual bool Insert(const NzImage& image, NzRectui* rect, bool* flipped, unsigned int* layerIndex) = 0; void RemoveListener(Listener* font) const; diff --git a/include/Nazara/Utility/GuillotineImageAtlas.hpp b/include/Nazara/Utility/GuillotineImageAtlas.hpp index 22c50fdcb..bf65129f6 100644 --- a/include/Nazara/Utility/GuillotineImageAtlas.hpp +++ b/include/Nazara/Utility/GuillotineImageAtlas.hpp @@ -28,6 +28,7 @@ class NAZARA_API NzGuillotineImageAtlas : public NzAbstractAtlas NzGuillotineBinPack::GuillotineSplitHeuristic GetRectSplitHeuristic() const; NzAbstractImage* GetLayer(unsigned int layerIndex) const; unsigned int GetLayerCount() const; + nzUInt32 GetStorage() const; bool Insert(const NzImage& image, NzRectui* rect, bool* flipped, unsigned int* layerIndex); diff --git a/src/Nazara/Graphics/Graphics.cpp b/src/Nazara/Graphics/Graphics.cpp index 0048404ad..32388e252 100644 --- a/src/Nazara/Graphics/Graphics.cpp +++ b/src/Nazara/Graphics/Graphics.cpp @@ -95,6 +95,10 @@ void NzGraphics::Uninitialize() // Libération du module s_moduleReferenceCounter = 0; + // Libération de l'atlas s'il vient de nous + if (NzFont::GetDefaultAtlas()->GetStorage() & nzDataStorage_Hardware) + NzFont::SetDefaultAtlas(nullptr); + // Loaders NzLoaders_Mesh_Unregister(); NzLoaders_OBJ_Unregister(); diff --git a/src/Nazara/Graphics/GuillotineTextureAtlas.cpp b/src/Nazara/Graphics/GuillotineTextureAtlas.cpp index 0963eddf3..baa477498 100644 --- a/src/Nazara/Graphics/GuillotineTextureAtlas.cpp +++ b/src/Nazara/Graphics/GuillotineTextureAtlas.cpp @@ -7,6 +7,11 @@ #include #include +nzUInt32 NzGuillotineTextureAtlas::GetStorage() const +{ + return nzDataStorage_Hardware; +} + NzAbstractImage* NzGuillotineTextureAtlas::ResizeImage(NzAbstractImage* oldImage, const NzVector2ui& size) const { std::unique_ptr newTexture(new NzTexture); diff --git a/src/Nazara/Utility/GuillotineImageAtlas.cpp b/src/Nazara/Utility/GuillotineImageAtlas.cpp index ebce4b01a..7f12b2e38 100644 --- a/src/Nazara/Utility/GuillotineImageAtlas.cpp +++ b/src/Nazara/Utility/GuillotineImageAtlas.cpp @@ -73,6 +73,11 @@ unsigned int NzGuillotineImageAtlas::GetLayerCount() const return m_layers.size(); } +nzUInt32 NzGuillotineImageAtlas::GetStorage() const +{ + return nzDataStorage_Software; +} + bool NzGuillotineImageAtlas::Insert(const NzImage& image, NzRectui* rect, bool* flipped, unsigned int* layerIndex) { if (m_layers.empty())