diff --git a/include/Nazara/Core/PluginManager.hpp b/include/Nazara/Core/PluginManager.hpp index f982f7f34..ebce7b145 100644 --- a/include/Nazara/Core/PluginManager.hpp +++ b/include/Nazara/Core/PluginManager.hpp @@ -10,6 +10,10 @@ #include #include #include +#include +#include + +class NzDynLib; class NAZARA_API NzPluginManager { @@ -30,6 +34,12 @@ class NAZARA_API NzPluginManager static void Unmount(const NzString& pluginPath); static void Uninitialize(); + + private: + static std::set s_directories; + static std::unordered_map s_plugins; + static bool s_initialized; + }; #endif // NAZARA_PLUGINMANAGER_HPP diff --git a/src/Nazara/Core/Core.cpp b/src/Nazara/Core/Core.cpp index d8d78a53c..0fd722719 100644 --- a/src/Nazara/Core/Core.cpp +++ b/src/Nazara/Core/Core.cpp @@ -7,6 +7,7 @@ #include #include #include +#include #include #include @@ -44,6 +45,7 @@ void NzCore::Uninitialize() s_moduleReferenceCounter = 0; NzHardwareInfo::Uninitialize(); + NzPluginManager::Uninitialize(); NzTaskScheduler::Uninitialize(); NazaraNotice("Uninitialized: Core"); diff --git a/src/Nazara/Core/HardwareInfo.cpp b/src/Nazara/Core/HardwareInfo.cpp index d358c72c9..ecc9dff77 100644 --- a/src/Nazara/Core/HardwareInfo.cpp +++ b/src/Nazara/Core/HardwareInfo.cpp @@ -118,7 +118,10 @@ bool NzHardwareInfo::Initialize() return true; if (!NzHardwareInfoImpl::IsCpuidSupported()) + { + NazaraError("Cpuid is not supported"); return false; + } s_initialized = true; diff --git a/src/Nazara/Core/PluginManager.cpp b/src/Nazara/Core/PluginManager.cpp index c0c5aa6f4..24fc3a1c0 100644 --- a/src/Nazara/Core/PluginManager.cpp +++ b/src/Nazara/Core/PluginManager.cpp @@ -8,8 +8,6 @@ #include #include #include -#include -#include #include namespace @@ -17,9 +15,6 @@ namespace using PluginLoad = int (*)(); using PluginUnload = void (*)(); - std::set s_directories; - std::unordered_map s_plugins; - NzString s_pluginFiles[] = { "NazaraAssimp", // nzPlugin_Assimp @@ -29,6 +24,12 @@ namespace bool NzPluginManager::AddDirectory(const NzString& directoryPath) { + if (!Initialize()) + { + NazaraError("Failed to initialize PluginManager"); + return false; + } + s_directories.insert(NzFile::AbsolutePath(directoryPath)); return true; @@ -36,9 +37,13 @@ bool NzPluginManager::AddDirectory(const NzString& directoryPath) bool NzPluginManager::Initialize() { + if (s_initialized) + return true; + AddDirectory("."); AddDirectory("plugins"); + s_initialized = true; return true; } @@ -49,6 +54,12 @@ bool NzPluginManager::Mount(nzPlugin plugin) bool NzPluginManager::Mount(const NzString& pluginPath, bool appendExtension) { + if (!Initialize()) + { + NazaraError("Failed to initialize PluginManager"); + return false; + } + NzString path = pluginPath; if (appendExtension && !path.EndsWith(NAZARA_DYNLIB_EXTENSION)) path += NAZARA_DYNLIB_EXTENSION; @@ -109,6 +120,12 @@ bool NzPluginManager::Mount(const NzString& pluginPath, bool appendExtension) void NzPluginManager::RemoveDirectory(const NzString& directoryPath) { + if (!Initialize()) + { + NazaraError("Failed to initialize PluginManager"); + return; + } + s_directories.erase(NzFile::AbsolutePath(directoryPath)); } @@ -119,6 +136,12 @@ void NzPluginManager::Unmount(nzPlugin plugin) void NzPluginManager::Unmount(const NzString& pluginPath) { + if (!Initialize()) + { + NazaraError("Failed to initialize PluginManager"); + return; + } + auto it = s_plugins.find(pluginPath); if (it == s_plugins.end()) { @@ -138,6 +161,9 @@ void NzPluginManager::Unmount(const NzString& pluginPath) void NzPluginManager::Uninitialize() { + if (!s_initialized) + return; + s_directories.clear(); for (auto& pair : s_plugins) @@ -151,4 +177,10 @@ void NzPluginManager::Uninitialize() } s_plugins.clear(); + + s_initialized = false; } + +std::set NzPluginManager::s_directories; +std::unordered_map NzPluginManager::s_plugins; +bool NzPluginManager::s_initialized = false; diff --git a/src/Nazara/Core/TaskScheduler.cpp b/src/Nazara/Core/TaskScheduler.cpp index dd5aedd0c..bf916392e 100644 --- a/src/Nazara/Core/TaskScheduler.cpp +++ b/src/Nazara/Core/TaskScheduler.cpp @@ -35,7 +35,10 @@ bool NzTaskScheduler::Initialize() void NzTaskScheduler::Run() { if (!Initialize()) - NazaraError("Failed to initialize TaskScheduler"); + { + NazaraError("Failed to initialize Task Scheduler"); + return; + } if (!s_pendingWorks.empty()) { @@ -66,7 +69,10 @@ void NzTaskScheduler::Uninitialize() void NzTaskScheduler::WaitForTasks() { if (!Initialize()) - NazaraError("Failed to initialize TaskScheduler"); + { + NazaraError("Failed to initialize Task Scheduler"); + return; + } NzTaskSchedulerImpl::WaitForTasks(); } @@ -74,7 +80,10 @@ void NzTaskScheduler::WaitForTasks() void NzTaskScheduler::AddTaskFunctor(NzFunctor* taskFunctor) { if (!Initialize()) - NazaraError("Failed to initialize TaskScheduler"); + { + NazaraError("Failed to initialize Task Scheduler"); + return; + } s_pendingWorks.push_back(taskFunctor); }