Fixed crash on Utility uninitialisation

Former-commit-id: ef9f53674fe21c4d7780e68c62f7981554663a85
This commit is contained in:
Lynix 2015-01-17 22:55:50 +01:00
parent cfe1bcf107
commit 9662f4167d
6 changed files with 19 additions and 0 deletions

View File

@ -16,6 +16,8 @@ class NAZARA_API NzGuillotineTextureAtlas : public NzGuillotineImageAtlas
NzGuillotineTextureAtlas() = default; NzGuillotineTextureAtlas() = default;
~NzGuillotineTextureAtlas() = default; ~NzGuillotineTextureAtlas() = default;
nzUInt32 GetStorage() const;
private: private:
NzAbstractImage* ResizeImage(NzAbstractImage* oldImage, const NzVector2ui& size) const override; NzAbstractImage* ResizeImage(NzAbstractImage* oldImage, const NzVector2ui& size) const override;
}; };

View File

@ -10,6 +10,7 @@
#include <Nazara/Prerequesites.hpp> #include <Nazara/Prerequesites.hpp>
#include <Nazara/Core/SparsePtr.hpp> #include <Nazara/Core/SparsePtr.hpp>
#include <Nazara/Math/Rect.hpp> #include <Nazara/Math/Rect.hpp>
#include <Nazara/Utility/Enums.hpp>
#include <unordered_map> #include <unordered_map>
class NzAbstractImage; class NzAbstractImage;
@ -29,6 +30,7 @@ class NAZARA_API NzAbstractAtlas
virtual void Free(NzSparsePtr<const NzRectui> rects, NzSparsePtr<unsigned int> layers, unsigned int count) = 0; virtual void Free(NzSparsePtr<const NzRectui> rects, NzSparsePtr<unsigned int> layers, unsigned int count) = 0;
virtual NzAbstractImage* GetLayer(unsigned int layerIndex) const = 0; virtual NzAbstractImage* GetLayer(unsigned int layerIndex) const = 0;
virtual unsigned int GetLayerCount() 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; virtual bool Insert(const NzImage& image, NzRectui* rect, bool* flipped, unsigned int* layerIndex) = 0;
void RemoveListener(Listener* font) const; void RemoveListener(Listener* font) const;

View File

@ -28,6 +28,7 @@ class NAZARA_API NzGuillotineImageAtlas : public NzAbstractAtlas
NzGuillotineBinPack::GuillotineSplitHeuristic GetRectSplitHeuristic() const; NzGuillotineBinPack::GuillotineSplitHeuristic GetRectSplitHeuristic() const;
NzAbstractImage* GetLayer(unsigned int layerIndex) const; NzAbstractImage* GetLayer(unsigned int layerIndex) const;
unsigned int GetLayerCount() const; unsigned int GetLayerCount() const;
nzUInt32 GetStorage() const;
bool Insert(const NzImage& image, NzRectui* rect, bool* flipped, unsigned int* layerIndex); bool Insert(const NzImage& image, NzRectui* rect, bool* flipped, unsigned int* layerIndex);

View File

@ -95,6 +95,10 @@ void NzGraphics::Uninitialize()
// Libération du module // Libération du module
s_moduleReferenceCounter = 0; s_moduleReferenceCounter = 0;
// Libération de l'atlas s'il vient de nous
if (NzFont::GetDefaultAtlas()->GetStorage() & nzDataStorage_Hardware)
NzFont::SetDefaultAtlas(nullptr);
// Loaders // Loaders
NzLoaders_Mesh_Unregister(); NzLoaders_Mesh_Unregister();
NzLoaders_OBJ_Unregister(); NzLoaders_OBJ_Unregister();

View File

@ -7,6 +7,11 @@
#include <Nazara/Renderer/Texture.hpp> #include <Nazara/Renderer/Texture.hpp>
#include <Nazara/Graphics/Debug.hpp> #include <Nazara/Graphics/Debug.hpp>
nzUInt32 NzGuillotineTextureAtlas::GetStorage() const
{
return nzDataStorage_Hardware;
}
NzAbstractImage* NzGuillotineTextureAtlas::ResizeImage(NzAbstractImage* oldImage, const NzVector2ui& size) const NzAbstractImage* NzGuillotineTextureAtlas::ResizeImage(NzAbstractImage* oldImage, const NzVector2ui& size) const
{ {
std::unique_ptr<NzTexture> newTexture(new NzTexture); std::unique_ptr<NzTexture> newTexture(new NzTexture);

View File

@ -73,6 +73,11 @@ unsigned int NzGuillotineImageAtlas::GetLayerCount() const
return m_layers.size(); return m_layers.size();
} }
nzUInt32 NzGuillotineImageAtlas::GetStorage() const
{
return nzDataStorage_Software;
}
bool NzGuillotineImageAtlas::Insert(const NzImage& image, NzRectui* rect, bool* flipped, unsigned int* layerIndex) bool NzGuillotineImageAtlas::Insert(const NzImage& image, NzRectui* rect, bool* flipped, unsigned int* layerIndex)
{ {
if (m_layers.empty()) if (m_layers.empty())