diff --git a/include/Nazara/Audio/SoundBuffer.hpp b/include/Nazara/Audio/SoundBuffer.hpp index 90804e900..6e2cd624f 100644 --- a/include/Nazara/Audio/SoundBuffer.hpp +++ b/include/Nazara/Audio/SoundBuffer.hpp @@ -12,6 +12,7 @@ #include #include #include +#include #include #include #include @@ -29,6 +30,7 @@ class NzSoundBuffer; using NzSoundBufferConstListener = NzObjectListenerWrapper; using NzSoundBufferConstRef = NzObjectRef; +using NzSoundBufferLibrary = NzObjectLibrary; using NzSoundBufferListener = NzObjectListenerWrapper; using NzSoundBufferLoader = NzResourceLoader; using NzSoundBufferRef = NzObjectRef; @@ -38,7 +40,9 @@ struct NzSoundBufferImpl; class NAZARA_API NzSoundBuffer : public NzRefCounted, public NzResource, NzNonCopyable { friend NzSound; + friend NzSoundBufferLibrary; friend NzSoundBufferLoader; + friend class NzAudio; public: NzSoundBuffer() = default; @@ -66,8 +70,12 @@ class NAZARA_API NzSoundBuffer : public NzRefCounted, public NzResource, NzNonCo private: unsigned int GetOpenALBuffer() const; + static bool Initialize(); + static void Uninitialize(); + NzSoundBufferImpl* m_impl = nullptr; + static NzSoundBufferLibrary::LibraryMap s_library; static NzSoundBufferLoader::LoaderList s_loaders; }; diff --git a/include/Nazara/Graphics/Material.hpp b/include/Nazara/Graphics/Material.hpp index 8c6b057d7..120b6731c 100644 --- a/include/Nazara/Graphics/Material.hpp +++ b/include/Nazara/Graphics/Material.hpp @@ -9,6 +9,7 @@ #include #include +#include #include #include #include @@ -38,12 +39,14 @@ class NzMaterial; using NzMaterialConstListener = NzObjectListenerWrapper; using NzMaterialConstRef = NzObjectRef; +using NzMaterialLibrary = NzObjectLibrary; using NzMaterialListener = NzObjectListenerWrapper; using NzMaterialLoader = NzResourceLoader; using NzMaterialRef = NzObjectRef; class NAZARA_API NzMaterial : public NzRefCounted, public NzResource { + friend NzMaterialLibrary; friend NzMaterialLoader; friend class NzGraphics; @@ -172,8 +175,9 @@ class NAZARA_API NzMaterial : public NzRefCounted, public NzResource float m_alphaThreshold; float m_shininess; - static NzMaterialRef s_defaultMaterial; + static NzMaterialLibrary::LibraryMap s_library; static NzMaterialLoader::LoaderList s_loaders; + static NzMaterialRef s_defaultMaterial; }; #include diff --git a/include/Nazara/Graphics/ParticleController.hpp b/include/Nazara/Graphics/ParticleController.hpp index 528e5fabd..d033d742e 100644 --- a/include/Nazara/Graphics/ParticleController.hpp +++ b/include/Nazara/Graphics/ParticleController.hpp @@ -8,6 +8,7 @@ #define NAZARA_PARTICLECONTROLLER_HPP #include +#include #include #include #include @@ -18,17 +19,27 @@ class NzParticleSystem; using NzParticleControllerConstListener = NzObjectListenerWrapper; using NzParticleControllerConstRef = NzObjectRef; +using NzParticleControllerLibrary = NzObjectLibrary; using NzParticleControllerListener = NzObjectListenerWrapper; using NzParticleControllerRef = NzObjectRef; class NAZARA_API NzParticleController : public NzRefCounted { + friend NzParticleControllerLibrary; + friend class NzGraphics; + public: NzParticleController() = default; NzParticleController(const NzParticleController& controller); virtual ~NzParticleController(); virtual void Apply(NzParticleSystem& system, NzParticleMapper& mapper, unsigned int startId, unsigned int endId, float elapsedTime) = 0; + + private: + static bool Initialize(); + static void Uninitialize(); + + static NzParticleControllerLibrary::LibraryMap s_library; }; #endif // NAZARA_PARTICLECONTROLLER_HPP diff --git a/include/Nazara/Graphics/ParticleDeclaration.hpp b/include/Nazara/Graphics/ParticleDeclaration.hpp index 4f423b4f8..1f9b1e35e 100644 --- a/include/Nazara/Graphics/ParticleDeclaration.hpp +++ b/include/Nazara/Graphics/ParticleDeclaration.hpp @@ -8,6 +8,7 @@ #define NAZARA_PARTICLEDECLARATION_HPP #include +#include #include #include #include @@ -18,11 +19,13 @@ class NzParticleDeclaration; using NzParticleDeclarationConstListener = NzObjectListenerWrapper; using NzParticleDeclarationConstRef = NzObjectRef; +using NzParticleDeclarationLibrary = NzObjectLibrary; using NzParticleDeclarationListener = NzObjectListenerWrapper; using NzParticleDeclarationRef = NzObjectRef; class NAZARA_API NzParticleDeclaration : public NzRefCounted { + friend NzParticleDeclarationLibrary; friend class NzGraphics; public: @@ -65,6 +68,7 @@ class NAZARA_API NzParticleDeclaration : public NzRefCounted unsigned int m_stride; static NzParticleDeclaration s_declarations[nzParticleLayout_Max+1]; + static NzParticleDeclarationLibrary::LibraryMap s_library; }; #endif // NAZARA_PARTICLEDECLARATION_HPP diff --git a/include/Nazara/Graphics/ParticleGenerator.hpp b/include/Nazara/Graphics/ParticleGenerator.hpp index 006420184..c5cc54554 100644 --- a/include/Nazara/Graphics/ParticleGenerator.hpp +++ b/include/Nazara/Graphics/ParticleGenerator.hpp @@ -8,6 +8,7 @@ #define NAZARA_PARTICLEGENERATOR_HPP #include +#include #include #include #include @@ -18,17 +19,27 @@ class NzParticleSystem; using NzParticleGeneratorConstListener = NzObjectListenerWrapper; using NzParticleGeneratorConstRef = NzObjectRef; +using NzParticleGeneratorLibrary = NzObjectLibrary; using NzParticleGeneratorListener = NzObjectListenerWrapper; using NzParticleGeneratorRef = NzObjectRef; class NAZARA_API NzParticleGenerator : public NzRefCounted { + friend NzParticleGeneratorLibrary; + friend class NzGraphics; + public: NzParticleGenerator() = default; NzParticleGenerator(const NzParticleGenerator& generator); virtual ~NzParticleGenerator(); virtual void Generate(NzParticleSystem& system, NzParticleMapper& mapper, unsigned int startId, unsigned int endId) = 0; + + private: + static bool Initialize(); + static void Uninitialize(); + + static NzParticleGeneratorLibrary::LibraryMap s_library; }; #endif // NAZARA_PARTICLEGENERATOR_HPP diff --git a/include/Nazara/Graphics/ParticleRenderer.hpp b/include/Nazara/Graphics/ParticleRenderer.hpp index d93df0d8b..0bd5d7879 100644 --- a/include/Nazara/Graphics/ParticleRenderer.hpp +++ b/include/Nazara/Graphics/ParticleRenderer.hpp @@ -8,6 +8,7 @@ #define NAZARA_PARTICLERENDERER_HPP #include +#include #include #include #include @@ -19,17 +20,27 @@ class NzParticleSystem; using NzParticleRendererConstListener = NzObjectListenerWrapper; using NzParticleRendererConstRef = NzObjectRef; +using NzParticleRendererLibrary = NzObjectLibrary; using NzParticleRendererListener = NzObjectListenerWrapper; using NzParticleRendererRef = NzObjectRef; class NAZARA_API NzParticleRenderer : public NzRefCounted { + friend NzParticleRendererLibrary; + friend class NzGraphics; + public: NzParticleRenderer() = default; NzParticleRenderer(const NzParticleRenderer& renderer); virtual ~NzParticleRenderer(); virtual void Render(const NzParticleSystem& system, const NzParticleMapper& mapper, unsigned int startId, unsigned int endId, NzAbstractRenderQueue* renderQueue) = 0; + + private: + static bool Initialize(); + static void Uninitialize(); + + static NzParticleRendererLibrary::LibraryMap s_library; }; #endif // NAZARA_PARTICLERENDERER_HPP diff --git a/include/Nazara/Renderer/Context.hpp b/include/Nazara/Renderer/Context.hpp index 94ebad183..a7c0f5043 100644 --- a/include/Nazara/Renderer/Context.hpp +++ b/include/Nazara/Renderer/Context.hpp @@ -8,6 +8,7 @@ #define NAZARA_CONTEXT_HPP #include +#include #include #include #include @@ -19,6 +20,7 @@ class NzContext; using NzContextConstListener = NzObjectListenerWrapper; using NzContextConstRef = NzObjectRef; +using NzContextLibrary = NzObjectLibrary; using NzContextListener = NzObjectListenerWrapper; using NzContextRef = NzObjectRef; @@ -27,6 +29,7 @@ class NzContextImpl; class NAZARA_API NzContext : public NzRefCounted { friend NzContextImpl; + friend NzContextLibrary; friend class NzOpenGL; public: @@ -55,6 +58,7 @@ class NAZARA_API NzContext : public NzRefCounted static std::unique_ptr s_reference; static std::vector> s_contexts; + static NzContextLibrary::LibraryMap s_library; }; #endif // NAZARA_CONTEXT_HPP diff --git a/include/Nazara/Renderer/RenderBuffer.hpp b/include/Nazara/Renderer/RenderBuffer.hpp index 09f98f9e0..69a76aa6a 100644 --- a/include/Nazara/Renderer/RenderBuffer.hpp +++ b/include/Nazara/Renderer/RenderBuffer.hpp @@ -9,6 +9,7 @@ #include #include +#include #include #include #include @@ -18,11 +19,15 @@ class NzRenderBuffer; using NzRenderBufferConstListener = NzObjectListenerWrapper; using NzRenderBufferConstRef = NzObjectRef; +using NzRenderBufferLibrary = NzObjectLibrary; using NzRenderBufferListener = NzObjectListenerWrapper; using NzRenderBufferRef = NzObjectRef; class NAZARA_API NzRenderBuffer : public NzRefCounted, NzNonCopyable { + friend NzRenderBufferLibrary; + friend class NzRenderer; + public: NzRenderBuffer(); ~NzRenderBuffer(); @@ -43,10 +48,15 @@ class NAZARA_API NzRenderBuffer : public NzRefCounted, NzNonCopyable template static NzRenderBufferRef New(Args&&... args); private: + static bool Initialize(); + static void Uninitialize(); + nzPixelFormat m_pixelFormat; unsigned int m_height; unsigned int m_id; unsigned int m_width; + + static NzRenderBufferLibrary::LibraryMap s_library; }; #include diff --git a/include/Nazara/Renderer/Texture.hpp b/include/Nazara/Renderer/Texture.hpp index 48df60331..893e71a38 100644 --- a/include/Nazara/Renderer/Texture.hpp +++ b/include/Nazara/Renderer/Texture.hpp @@ -9,6 +9,7 @@ #include #include +#include #include #include #include @@ -22,6 +23,7 @@ class NzTexture; using NzTextureConstListener = NzObjectListenerWrapper; using NzTextureConstRef = NzObjectRef; +using NzTextureLibrary = NzObjectLibrary; using NzTextureListener = NzObjectListenerWrapper; using NzTextureRef = NzObjectRef; @@ -29,6 +31,7 @@ struct NzTextureImpl; class NAZARA_API NzTexture : public NzAbstractImage, public NzRefCounted, public NzResource, NzNonCopyable { + friend NzTextureLibrary; friend class NzRenderer; public: @@ -106,7 +109,12 @@ class NAZARA_API NzTexture : public NzAbstractImage, public NzRefCounted, public private: bool CreateTexture(bool proxy); + static bool Initialize(); + static void Uninitialize(); + NzTextureImpl* m_impl = nullptr; + + static NzTextureLibrary::LibraryMap s_library; }; #include diff --git a/include/Nazara/Utility/Animation.hpp b/include/Nazara/Utility/Animation.hpp index 430ac07f6..ea2d165f1 100644 --- a/include/Nazara/Utility/Animation.hpp +++ b/include/Nazara/Utility/Animation.hpp @@ -8,6 +8,7 @@ #define NAZARA_ANIMATION_HPP #include +#include #include #include #include @@ -33,6 +34,7 @@ class NzSkeleton; using NzAnimationConstListener = NzObjectListenerWrapper; using NzAnimationConstRef = NzObjectRef; +using NzAnimationLibrary = NzObjectLibrary; using NzAnimationListener = NzObjectListenerWrapper; using NzAnimationLoader = NzResourceLoader; using NzAnimationRef = NzObjectRef; @@ -41,7 +43,9 @@ struct NzAnimationImpl; class NAZARA_API NzAnimation : public NzRefCounted, public NzResource { + friend NzAnimationLibrary; friend NzAnimationLoader; + friend class NzUtility; public: NzAnimation() = default; @@ -83,8 +87,12 @@ class NAZARA_API NzAnimation : public NzRefCounted, public NzResource template static NzAnimationRef New(Args&&... args); private: + static bool Initialize(); + static void Uninitialize(); + NzAnimationImpl* m_impl = nullptr; + static NzAnimationLibrary::LibraryMap s_library; static NzAnimationLoader::LoaderList s_loaders; }; diff --git a/include/Nazara/Utility/Font.hpp b/include/Nazara/Utility/Font.hpp index 3ef5411a5..02ac9ad5c 100644 --- a/include/Nazara/Utility/Font.hpp +++ b/include/Nazara/Utility/Font.hpp @@ -9,6 +9,7 @@ #include #include +#include #include #include #include @@ -29,13 +30,16 @@ struct NzFontGlyph; using NzFontConstListener = NzObjectListenerWrapper; using NzFontConstRef = NzObjectRef; +using NzFontLibrary = NzObjectLibrary; using NzFontListener = NzObjectListenerWrapper; using NzFontLoader = NzResourceLoader; using NzFontRef = NzObjectRef; class NAZARA_API NzFont : public NzRefCounted, public NzResource, NzAbstractAtlas::Listener, NzNonCopyable { + friend NzFontLibrary; friend NzFontLoader; + friend class NzUtility; public: struct Glyph; @@ -83,16 +87,12 @@ class NAZARA_API NzFont : public NzRefCounted, public NzResource, NzAbstractAtla static unsigned int GetDefaultGlyphBorder(); static unsigned int GetDefaultMinimumStepSize(); - static bool Initialize(); - template static NzFontRef New(Args&&... args); static void SetDefaultAtlas(const std::shared_ptr& atlas); static void SetDefaultGlyphBorder(unsigned int borderSize); static void SetDefaultMinimumStepSize(unsigned int minimumStepSize); - static void Uninitialize(); - enum ModicationCode { ModificationCode_AtlasChanged, @@ -131,6 +131,9 @@ class NAZARA_API NzFont : public NzRefCounted, public NzResource, NzAbstractAtla void OnAtlasReleased(const NzAbstractAtlas* atlas, void* userdata) override; const Glyph& PrecacheGlyph(GlyphMap& glyphMap, unsigned int characterSize, nzUInt32 style, char32_t character) const; + static bool Initialize(); + static void Uninitialize(); + std::shared_ptr m_atlas; std::unique_ptr m_data; mutable std::unordered_map> m_kerningCache; @@ -141,6 +144,7 @@ class NAZARA_API NzFont : public NzRefCounted, public NzResource, NzAbstractAtla static std::shared_ptr s_defaultAtlas; static NzFontRef s_defaultFont; + static NzFontLibrary::LibraryMap s_library; static NzFontLoader::LoaderList s_loaders; static unsigned int s_defaultGlyphBorder; static unsigned int s_defaultMinimumStepSize; diff --git a/include/Nazara/Utility/Image.hpp b/include/Nazara/Utility/Image.hpp index c62b62eaf..86b59349c 100644 --- a/include/Nazara/Utility/Image.hpp +++ b/include/Nazara/Utility/Image.hpp @@ -10,6 +10,7 @@ #include #include #include +#include #include #include #include @@ -36,13 +37,16 @@ class NzImage; using NzImageConstListener = NzObjectListenerWrapper; using NzImageConstRef = NzObjectRef; +using NzImageLibrary = NzObjectLibrary; using NzImageListener = NzObjectListenerWrapper; using NzImageLoader = NzResourceLoader; using NzImageRef = NzObjectRef; class NAZARA_API NzImage : public NzAbstractImage, public NzRefCounted, public NzResource { + friend NzImageLibrary; friend NzImageLoader; + friend class NzUtility; public: struct SharedImage; @@ -145,8 +149,12 @@ class NAZARA_API NzImage : public NzAbstractImage, public NzRefCounted, public N void EnsureOwnership(); void ReleaseImage(); + static bool Initialize(); + static void Uninitialize(); + SharedImage* m_sharedImage; + static NzImageLibrary::LibraryMap s_library; static NzImageLoader::LoaderList s_loaders; }; diff --git a/include/Nazara/Utility/Mesh.hpp b/include/Nazara/Utility/Mesh.hpp index e4f3d553e..e440baf06 100644 --- a/include/Nazara/Utility/Mesh.hpp +++ b/include/Nazara/Utility/Mesh.hpp @@ -9,6 +9,7 @@ #include #include +#include #include #include #include @@ -55,6 +56,7 @@ typedef NzVertexStruct_XYZ_Normal_UV_Tangent_Skinning NzSkeletalMeshVertex; using NzMeshConstListener = NzObjectListenerWrapper; using NzMeshConstRef = NzObjectRef; +using NzMeshLibrary = NzObjectLibrary; using NzMeshListener = NzObjectListenerWrapper; using NzMeshLoader = NzResourceLoader; using NzMeshRef = NzObjectRef; @@ -63,7 +65,9 @@ struct NzMeshImpl; class NAZARA_API NzMesh : public NzRefCounted, public NzResource { + friend NzMeshLibrary; friend NzMeshLoader; + friend class NzUtility; public: NzMesh() = default; @@ -128,6 +132,10 @@ class NAZARA_API NzMesh : public NzRefCounted, public NzResource private: NzMeshImpl* m_impl = nullptr; + static bool Initialize(); + static void Uninitialize(); + + static NzMeshLibrary::LibraryMap s_library; static NzMeshLoader::LoaderList s_loaders; }; diff --git a/include/Nazara/Utility/Skeleton.hpp b/include/Nazara/Utility/Skeleton.hpp index a247ece16..e91dc897f 100644 --- a/include/Nazara/Utility/Skeleton.hpp +++ b/include/Nazara/Utility/Skeleton.hpp @@ -8,6 +8,7 @@ #define NAZARA_SKELETON_HPP #include +#include #include #include #include @@ -19,6 +20,7 @@ class NzSkeleton; using NzSkeletonConstListener = NzObjectListenerWrapper; using NzSkeletonConstRef = NzObjectRef; +using NzSkeletonLibrary = NzObjectLibrary; using NzSkeletonListener = NzObjectListenerWrapper; using NzSkeletonRef = NzObjectRef; @@ -27,6 +29,8 @@ struct NzSkeletonImpl; class NAZARA_API NzSkeleton : public NzRefCounted { friend NzJoint; + friend NzSkeletonLibrary; + friend class NzUtility; public: NzSkeleton() = default; @@ -60,7 +64,12 @@ class NAZARA_API NzSkeleton : public NzRefCounted void InvalidateJointMap(); void UpdateJointMap() const; + static bool Initialize(); + static void Uninitialize(); + NzSkeletonImpl* m_impl = nullptr; + + static NzSkeletonLibrary::LibraryMap s_library; }; #include diff --git a/include/Nazara/Utility/VertexDeclaration.hpp b/include/Nazara/Utility/VertexDeclaration.hpp index 2b1146a9f..700d54e10 100644 --- a/include/Nazara/Utility/VertexDeclaration.hpp +++ b/include/Nazara/Utility/VertexDeclaration.hpp @@ -8,6 +8,7 @@ #define NAZARA_VERTEXDECLARATION_HPP #include +#include #include #include #include @@ -17,11 +18,13 @@ class NzVertexDeclaration; using NzVertexDeclarationConstListener = NzObjectListenerWrapper; using NzVertexDeclarationConstRef = NzObjectRef; +using NzVertexDeclarationLibrary = NzObjectLibrary; using NzVertexDeclarationListener = NzObjectListenerWrapper; using NzVertexDeclarationRef = NzObjectRef; class NAZARA_API NzVertexDeclaration : public NzRefCounted { + friend NzVertexDeclarationLibrary; friend class NzUtility; public: @@ -66,6 +69,7 @@ class NAZARA_API NzVertexDeclaration : public NzRefCounted unsigned int m_stride; static NzVertexDeclaration s_declarations[nzVertexLayout_Max+1]; + static NzVertexDeclarationLibrary::LibraryMap s_library; }; #include diff --git a/src/Nazara/Audio/Audio.cpp b/src/Nazara/Audio/Audio.cpp index 3ef54bf46..7f305e3e1 100644 --- a/src/Nazara/Audio/Audio.cpp +++ b/src/Nazara/Audio/Audio.cpp @@ -6,6 +6,7 @@ #include #include #include +#include #include #include #include @@ -103,13 +104,19 @@ bool NzAudio::Initialize() // Initialisation du module NzCallOnExit onExit(NzAudio::Uninitialize); - // Initialisation d'OpenGL + // Initialisation d'OpenAL if (!NzOpenAL::Initialize()) { NazaraError("Failed to initialize OpenAL"); return false; } + if (!NzSoundBuffer::Initialize()) + { + NazaraError("Failed to initialize sound buffers"); + return false; + } + // Définition de l'orientation par défaut SetListenerDirection(NzVector3f::Forward()); @@ -227,6 +234,7 @@ void NzAudio::Uninitialize() // Loaders NzLoaders_sndfile_Unregister(); + NzSoundBuffer::Uninitialize(); NzOpenAL::Uninitialize(); NazaraNotice("Uninitialized: Audio module"); diff --git a/src/Nazara/Audio/SoundBuffer.cpp b/src/Nazara/Audio/SoundBuffer.cpp index 6cbfcc6ba..ec72dbc95 100644 --- a/src/Nazara/Audio/SoundBuffer.cpp +++ b/src/Nazara/Audio/SoundBuffer.cpp @@ -226,4 +226,21 @@ unsigned int NzSoundBuffer::GetOpenALBuffer() const return m_impl->buffer; } +bool NzSoundBuffer::Initialize() +{ + if (!NzSoundBufferLibrary::Initialize()) + { + NazaraError("Failed to initialise library"); + return false; + } + + return true; +} + +void NzSoundBuffer::Uninitialize() +{ + NzSoundBufferLibrary::Uninitialize(); +} + +NzSoundBufferLibrary::LibraryMap NzSoundBuffer::s_library; NzSoundBufferLoader::LoaderList NzSoundBuffer::s_loaders; diff --git a/src/Nazara/Graphics/Graphics.cpp b/src/Nazara/Graphics/Graphics.cpp index 93c7766a3..d04f83d24 100644 --- a/src/Nazara/Graphics/Graphics.cpp +++ b/src/Nazara/Graphics/Graphics.cpp @@ -11,7 +11,10 @@ #include #include #include +#include #include +#include +#include #include #include #include @@ -47,12 +50,30 @@ bool NzGraphics::Initialize() return false; } + if (!NzParticleController::Initialize()) + { + NazaraError("Failed to initialize particle controllers"); + return false; + } + if (!NzParticleDeclaration::Initialize()) { NazaraError("Failed to initialize particle declarations"); return false; } + if (!NzParticleGenerator::Initialize()) + { + NazaraError("Failed to initialize particle generators"); + return false; + } + + if (!NzParticleRenderer::Initialize()) + { + NazaraError("Failed to initialize particle renderers"); + return false; + } + if (!NzSkinningManager::Initialize()) { NazaraError("Failed to initialize skinning manager"); @@ -144,9 +165,12 @@ void NzGraphics::Uninitialize() NzDeferredRenderTechnique::Uninitialize(); NzForwardRenderTechnique::Uninitialize(); - NzMaterial::Uninitialize(); - NzParticleDeclaration::Uninitialize(); NzSkinningManager::Uninitialize(); + NzParticleRenderer::Uninitialize(); + NzParticleGenerator::Uninitialize(); + NzParticleDeclaration::Uninitialize(); + NzParticleController::Uninitialize(); + NzMaterial::Uninitialize(); NazaraNotice("Uninitialized: Graphics module"); diff --git a/src/Nazara/Graphics/Material.cpp b/src/Nazara/Graphics/Material.cpp index 812afd886..4b1ee6a2f 100644 --- a/src/Nazara/Graphics/Material.cpp +++ b/src/Nazara/Graphics/Material.cpp @@ -705,6 +705,17 @@ void NzMaterial::InvalidateShaders() bool NzMaterial::Initialize() { + if (!NzMaterialLibrary::Initialize()) + { + NazaraError("Failed to initialise library"); + return false; + } + + s_defaultMaterial = NzMaterial::New(); + s_defaultMaterial->Enable(nzRendererParameter_FaceCulling, false); + s_defaultMaterial->SetFaceFilling(nzFaceFilling_Line); + NzMaterialLibrary::Register("Default", s_defaultMaterial); + bool glsl140 = (NzOpenGL::GetGLSLVersion() >= 140); // Basic shader @@ -769,10 +780,6 @@ bool NzMaterial::Initialize() NzUberShaderLibrary::Register("PhongLighting", uberShader); } - s_defaultMaterial = NzMaterial::New(); - s_defaultMaterial->Enable(nzRendererParameter_FaceCulling, false); - s_defaultMaterial->SetFaceFilling(nzFaceFilling_Line); - return true; } @@ -781,7 +788,9 @@ void NzMaterial::Uninitialize() s_defaultMaterial.Reset(); NzUberShaderLibrary::Unregister("PhongLighting"); NzUberShaderLibrary::Unregister("Basic"); + NzMaterialLibrary::Uninitialize(); } -NzMaterialRef NzMaterial::s_defaultMaterial = nullptr; +NzMaterialLibrary::LibraryMap NzMaterial::s_library; NzMaterialLoader::LoaderList NzMaterial::s_loaders; +NzMaterialRef NzMaterial::s_defaultMaterial = nullptr; diff --git a/src/Nazara/Graphics/ParticleController.cpp b/src/Nazara/Graphics/ParticleController.cpp index 6dadf695d..45173aa0c 100644 --- a/src/Nazara/Graphics/ParticleController.cpp +++ b/src/Nazara/Graphics/ParticleController.cpp @@ -12,3 +12,21 @@ NzRefCounted() } NzParticleController::~NzParticleController() = default; + +bool NzParticleController::Initialize() +{ + if (!NzParticleControllerLibrary::Initialize()) + { + NazaraError("Failed to initialise library"); + return false; + } + + return true; +} + +void NzParticleController::Uninitialize() +{ + NzParticleControllerLibrary::Uninitialize(); +} + +NzParticleControllerLibrary::LibraryMap NzParticleController::s_library; diff --git a/src/Nazara/Graphics/ParticleDeclaration.cpp b/src/Nazara/Graphics/ParticleDeclaration.cpp index 586ac3489..9804826c2 100644 --- a/src/Nazara/Graphics/ParticleDeclaration.cpp +++ b/src/Nazara/Graphics/ParticleDeclaration.cpp @@ -177,6 +177,12 @@ bool NzParticleDeclaration::IsTypeSupported(nzComponentType type) bool NzParticleDeclaration::Initialize() { + if (!NzParticleDeclarationLibrary::Initialize()) + { + NazaraError("Failed to initialise library"); + return false; + } + try { NzErrorFlags flags(nzErrorFlag_Silent | nzErrorFlag_ThrowException); @@ -225,7 +231,8 @@ bool NzParticleDeclaration::Initialize() void NzParticleDeclaration::Uninitialize() { - // Rien à faire + NzParticleDeclarationLibrary::Uninitialize(); } NzParticleDeclaration NzParticleDeclaration::s_declarations[nzParticleLayout_Max+1]; +NzParticleDeclarationLibrary::LibraryMap NzParticleDeclaration::s_library; diff --git a/src/Nazara/Graphics/ParticleGenerator.cpp b/src/Nazara/Graphics/ParticleGenerator.cpp index 9ce5327b5..6dc83a6c0 100644 --- a/src/Nazara/Graphics/ParticleGenerator.cpp +++ b/src/Nazara/Graphics/ParticleGenerator.cpp @@ -12,3 +12,21 @@ NzRefCounted() } NzParticleGenerator::~NzParticleGenerator() = default; + +bool NzParticleGenerator::Initialize() +{ + if (!NzParticleGeneratorLibrary::Initialize()) + { + NazaraError("Failed to initialise library"); + return false; + } + + return true; +} + +void NzParticleGenerator::Uninitialize() +{ + NzParticleGeneratorLibrary::Uninitialize(); +} + +NzParticleGeneratorLibrary::LibraryMap NzParticleGenerator::s_library; diff --git a/src/Nazara/Graphics/ParticleRenderer.cpp b/src/Nazara/Graphics/ParticleRenderer.cpp index 5a743086e..8ef7cd31b 100644 --- a/src/Nazara/Graphics/ParticleRenderer.cpp +++ b/src/Nazara/Graphics/ParticleRenderer.cpp @@ -12,3 +12,21 @@ NzRefCounted() } NzParticleRenderer::~NzParticleRenderer() = default; + +bool NzParticleRenderer::Initialize() +{ + if (!NzParticleRendererLibrary::Initialize()) + { + NazaraError("Failed to initialise library"); + return false; + } + + return true; +} + +void NzParticleRenderer::Uninitialize() +{ + NzParticleRendererLibrary::Uninitialize(); +} + +NzParticleRendererLibrary::LibraryMap NzParticleRenderer::s_library; diff --git a/src/Nazara/Renderer/Context.cpp b/src/Nazara/Renderer/Context.cpp index 3a897d7aa..3066cd269 100644 --- a/src/Nazara/Renderer/Context.cpp +++ b/src/Nazara/Renderer/Context.cpp @@ -317,6 +317,12 @@ const NzContext* NzContext::GetThreadContext() bool NzContext::Initialize() { + if (!NzContextLibrary::Initialize()) + { + NazaraError("Failed to initialise library"); + return false; + } + NzContextParameters parameters; parameters.shared = false; // Difficile de partager le contexte de référence avec lui-même @@ -343,9 +349,11 @@ bool NzContext::Initialize() void NzContext::Uninitialize() { + NzContextLibrary::Uninitialize(); s_contexts.clear(); // On supprime tous les contextes créés s_reference.reset(); } std::unique_ptr NzContext::s_reference; std::vector> NzContext::s_contexts; +NzContextLibrary::LibraryMap NzContext::s_library; diff --git a/src/Nazara/Renderer/RenderBuffer.cpp b/src/Nazara/Renderer/RenderBuffer.cpp index c569742d5..9e6cdb79f 100644 --- a/src/Nazara/Renderer/RenderBuffer.cpp +++ b/src/Nazara/Renderer/RenderBuffer.cpp @@ -114,3 +114,21 @@ bool NzRenderBuffer::IsSupported() { return NzOpenGL::IsSupported(nzOpenGLExtension_FrameBufferObject); } + +bool NzRenderBuffer::Initialize() +{ + if (!NzRenderBufferLibrary::Initialize()) + { + NazaraError("Failed to initialise library"); + return false; + } + + return true; +} + +void NzRenderBuffer::Uninitialize() +{ + NzRenderBufferLibrary::Uninitialize(); +} + +NzRenderBufferLibrary::LibraryMap NzRenderBuffer::s_library; diff --git a/src/Nazara/Renderer/Renderer.cpp b/src/Nazara/Renderer/Renderer.cpp index f71192b05..d536c85ba 100644 --- a/src/Nazara/Renderer/Renderer.cpp +++ b/src/Nazara/Renderer/Renderer.cpp @@ -14,6 +14,7 @@ #include #include #include +#include #include #include #include @@ -736,7 +737,7 @@ bool NzRenderer::Initialize() NzCallOnExit onExit(NzRenderer::Uninitialize); // Initialisation d'OpenGL - if (!NzOpenGL::Initialize()) + if (!NzOpenGL::Initialize()) // Initialise également Context { NazaraError("Failed to initialize OpenGL"); return false; @@ -864,15 +865,27 @@ bool NzRenderer::Initialize() } } + if (!NzRenderBuffer::Initialize()) + { + NazaraError("Failed to initialize render buffers"); + return false; + } + if (!NzShader::Initialize()) { NazaraError("Failed to initialize shaders"); return false; } + if (!NzTexture::Initialize()) + { + NazaraError("Failed to initialize textures"); + return false; + } + if (!NzTextureSampler::Initialize()) { - NazaraError("Failed to initialize texture sampler"); + NazaraError("Failed to initialize texture samplers"); return false; } @@ -1545,7 +1558,9 @@ void NzRenderer::Uninitialize() NzUberShader::Uninitialize(); NzTextureSampler::Uninitialize(); + NzTexture::Uninitialize(); NzShader::Uninitialize(); + NzRenderBuffer::Uninitialize(); NzDebugDrawer::Uninitialize(); s_textureUnits.clear(); diff --git a/src/Nazara/Renderer/Texture.cpp b/src/Nazara/Renderer/Texture.cpp index f9ae3e810..d677a35df 100644 --- a/src/Nazara/Renderer/Texture.cpp +++ b/src/Nazara/Renderer/Texture.cpp @@ -1274,3 +1274,21 @@ bool NzTexture::CreateTexture(bool proxy) return true; } + +bool NzTexture::Initialize() +{ + if (!NzTextureLibrary::Initialize()) + { + NazaraError("Failed to initialise library"); + return false; + } + + return true; +} + +void NzTexture::Uninitialize() +{ + NzTextureLibrary::Uninitialize(); +} + +NzTextureLibrary::LibraryMap NzTexture::s_library; diff --git a/src/Nazara/Utility/Animation.cpp b/src/Nazara/Utility/Animation.cpp index 6b0d1b06e..3e95e4d77 100644 --- a/src/Nazara/Utility/Animation.cpp +++ b/src/Nazara/Utility/Animation.cpp @@ -511,4 +511,21 @@ void NzAnimation::RemoveSequence(unsigned int index) m_impl->sequences.erase(it); } +bool NzAnimation::Initialize() +{ + if (!NzAnimationLibrary::Initialize()) + { + NazaraError("Failed to initialise library"); + return false; + } + + return true; +} + +void NzAnimation::Uninitialize() +{ + NzAnimationLibrary::Uninitialize(); +} + +NzAnimationLibrary::LibraryMap NzAnimation::s_library; NzAnimationLoader::LoaderList NzAnimation::s_loaders; diff --git a/src/Nazara/Utility/Font.cpp b/src/Nazara/Utility/Font.cpp index 552c57cea..ae2f89298 100644 --- a/src/Nazara/Utility/Font.cpp +++ b/src/Nazara/Utility/Font.cpp @@ -363,15 +363,6 @@ unsigned int NzFont::GetDefaultMinimumStepSize() return s_defaultMinimumStepSize; } -bool NzFont::Initialize() -{ - s_defaultAtlas.reset(new NzGuillotineImageAtlas); - s_defaultGlyphBorder = 1; - s_defaultMinimumStepSize = 1; - - return true; -} - void NzFont::SetDefaultAtlas(const std::shared_ptr& atlas) { s_defaultAtlas = atlas; @@ -395,12 +386,6 @@ void NzFont::SetDefaultMinimumStepSize(unsigned int minimumStepSize) s_defaultMinimumStepSize = minimumStepSize; } -void NzFont::Uninitialize() -{ - s_defaultAtlas.reset(); - s_defaultFont.Reset(); -} - nzUInt64 NzFont::ComputeKey(unsigned int characterSize, nzUInt32 style) const { // On prend le pas en compte @@ -573,8 +558,31 @@ const NzFont::Glyph& NzFont::PrecacheGlyph(GlyphMap& glyphMap, unsigned int char return glyph; } +bool NzFont::Initialize() +{ + if (!NzFontLibrary::Initialize()) + { + NazaraError("Failed to initialise library"); + return false; + } + + s_defaultAtlas.reset(new NzGuillotineImageAtlas); + s_defaultGlyphBorder = 1; + s_defaultMinimumStepSize = 1; + + return true; +} + +void NzFont::Uninitialize() +{ + s_defaultAtlas.reset(); + s_defaultFont.Reset(); + NzFontLibrary::Uninitialize(); +} + std::shared_ptr NzFont::s_defaultAtlas; NzFontRef NzFont::s_defaultFont; +NzFontLibrary::LibraryMap NzFont::s_library; NzFontLoader::LoaderList NzFont::s_loaders; unsigned int NzFont::s_defaultGlyphBorder; unsigned int NzFont::s_defaultMinimumStepSize; diff --git a/src/Nazara/Utility/Image.cpp b/src/Nazara/Utility/Image.cpp index 246fef3ec..6499cddd5 100644 --- a/src/Nazara/Utility/Image.cpp +++ b/src/Nazara/Utility/Image.cpp @@ -1392,5 +1392,22 @@ void NzImage::ReleaseImage() m_sharedImage = &emptyImage; } +bool NzImage::Initialize() +{ + if (!NzImageLibrary::Initialize()) + { + NazaraError("Failed to initialise library"); + return false; + } + + return true; +} + +void NzImage::Uninitialize() +{ + NzImageLibrary::Uninitialize(); +} + NzImage::SharedImage NzImage::emptyImage(0, nzImageType_2D, nzPixelFormat_Undefined, 1, nullptr, 0, 0, 0); +NzImageLibrary::LibraryMap NzImage::s_library; NzImageLoader::LoaderList NzImage::s_loaders; diff --git a/src/Nazara/Utility/Mesh.cpp b/src/Nazara/Utility/Mesh.cpp index d58fc9ef8..97088ec40 100644 --- a/src/Nazara/Utility/Mesh.cpp +++ b/src/Nazara/Utility/Mesh.cpp @@ -1002,4 +1002,21 @@ void NzMesh::Transform(const NzMatrix4f& matrix) m_impl->aabbUpdated = false; } +bool NzMesh::Initialize() +{ + if (!NzMeshLibrary::Initialize()) + { + NazaraError("Failed to initialise library"); + return false; + } + + return true; +} + +void NzMesh::Uninitialize() +{ + NzMeshLibrary::Uninitialize(); +} + +NzMeshLibrary::LibraryMap NzMesh::s_library; NzMeshLoader::LoaderList NzMesh::s_loaders; diff --git a/src/Nazara/Utility/Skeleton.cpp b/src/Nazara/Utility/Skeleton.cpp index 84ddf661b..616b76fd5 100644 --- a/src/Nazara/Utility/Skeleton.cpp +++ b/src/Nazara/Utility/Skeleton.cpp @@ -416,3 +416,21 @@ void NzSkeleton::UpdateJointMap() const m_impl->jointMapUpdated = true; } + +bool NzSkeleton::Initialize() +{ + if (!NzSkeletonLibrary::Initialize()) + { + NazaraError("Failed to initialise library"); + return false; + } + + return true; +} + +void NzSkeleton::Uninitialize() +{ + NzSkeletonLibrary::Uninitialize(); +} + +NzSkeletonLibrary::LibraryMap NzSkeleton::s_library; diff --git a/src/Nazara/Utility/Utility.cpp b/src/Nazara/Utility/Utility.cpp index dab509037..b984ef30e 100644 --- a/src/Nazara/Utility/Utility.cpp +++ b/src/Nazara/Utility/Utility.cpp @@ -10,16 +10,20 @@ #include #include #include +#include #include #include #include +#include #include #include #include #include #include #include +#include #include +#include #include #include #include @@ -44,6 +48,12 @@ bool NzUtility::Initialize() // Initialisation du module NzCallOnExit onExit(NzUtility::Uninitialize); + if (!NzAnimation::Initialize()) + { + NazaraError("Failed to initialize animations"); + return false; + } + if (!NzBuffer::Initialize()) { NazaraError("Failed to initialize buffers"); @@ -56,12 +66,30 @@ bool NzUtility::Initialize() return false; } + if (!NzImage::Initialize()) + { + NazaraError("Failed to initialize images"); + return false; + } + + if (!NzMesh::Initialize()) + { + NazaraError("Failed to initialize meshes"); + return false; + } + if (!NzPixelFormat::Initialize()) { NazaraError("Failed to initialize pixel formats"); return false; } + if (!NzSkeleton::Initialize()) + { + NazaraError("Failed to initialize skeletons"); + return false; + } + if (!NzVertexDeclaration::Initialize()) { NazaraError("Failed to initialize vertex declarations"); @@ -129,9 +157,13 @@ void NzUtility::Uninitialize() NzWindow::Uninitialize(); NzVertexDeclaration::Uninitialize(); + NzSkeleton::Uninitialize(); NzPixelFormat::Uninitialize(); + NzMesh::Uninitialize(); + NzImage::Uninitialize(); NzFont::Uninitialize(); NzBuffer::Uninitialize(); + NzAnimation::Uninitialize(); NazaraNotice("Uninitialized: Utility module"); diff --git a/src/Nazara/Utility/VertexDeclaration.cpp b/src/Nazara/Utility/VertexDeclaration.cpp index 05f680380..dd605def5 100644 --- a/src/Nazara/Utility/VertexDeclaration.cpp +++ b/src/Nazara/Utility/VertexDeclaration.cpp @@ -179,6 +179,12 @@ bool NzVertexDeclaration::IsTypeSupported(nzComponentType type) bool NzVertexDeclaration::Initialize() { + if (!NzVertexDeclarationLibrary::Initialize()) + { + NazaraError("Failed to initialise library"); + return false; + } + try { NzErrorFlags flags(nzErrorFlag_Silent | nzErrorFlag_ThrowException); @@ -290,7 +296,8 @@ bool NzVertexDeclaration::Initialize() void NzVertexDeclaration::Uninitialize() { - // Rien à faire + NzVertexDeclarationLibrary::Uninitialize(); } NzVertexDeclaration NzVertexDeclaration::s_declarations[nzVertexLayout_Max+1]; +NzVertexDeclarationLibrary::LibraryMap NzVertexDeclaration::s_library;