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;
nzUInt32 GetStorage() const;
private:
NzAbstractImage* ResizeImage(NzAbstractImage* oldImage, const NzVector2ui& size) const override;
};

View File

@ -10,6 +10,7 @@
#include <Nazara/Prerequesites.hpp>
#include <Nazara/Core/SparsePtr.hpp>
#include <Nazara/Math/Rect.hpp>
#include <Nazara/Utility/Enums.hpp>
#include <unordered_map>
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 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;

View File

@ -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);

View File

@ -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();

View File

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

View File

@ -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())