From 8694f71c2a072b3e99ba47479448516366ebf74a Mon Sep 17 00:00:00 2001 From: Lynix Date: Wed, 3 Apr 2013 16:41:57 +0200 Subject: [PATCH] X::Initialize no longer takes arguments Former-commit-id: a8233235e89112630f2d31c637723443bd0829a4 --- include/Nazara/Core/Core.hpp | 2 +- include/Nazara/Core/TaskScheduler.hpp | 3 +- include/Nazara/Renderer/Renderer.hpp | 2 +- src/Nazara/Core/Core.cpp | 19 ++--------- src/Nazara/Core/HardwareInfo.cpp | 1 + src/Nazara/Core/TaskScheduler.cpp | 45 ++++++++++++++++----------- src/Nazara/Renderer/Renderer.cpp | 10 +----- src/Nazara/Utility/Utility.cpp | 16 +++++++--- 8 files changed, 47 insertions(+), 51 deletions(-) diff --git a/include/Nazara/Core/Core.hpp b/include/Nazara/Core/Core.hpp index 41077ffaf..9595eaa0b 100644 --- a/include/Nazara/Core/Core.hpp +++ b/include/Nazara/Core/Core.hpp @@ -16,7 +16,7 @@ class NAZARA_API NzCore NzCore() = delete; ~NzCore() = delete; - static bool Initialize(bool initializeHardwareInfo = false, bool initializeTaskScheduler = false); + static bool Initialize(); static bool IsInitialized(); diff --git a/include/Nazara/Core/TaskScheduler.hpp b/include/Nazara/Core/TaskScheduler.hpp index 4210937f3..401542603 100644 --- a/include/Nazara/Core/TaskScheduler.hpp +++ b/include/Nazara/Core/TaskScheduler.hpp @@ -21,7 +21,8 @@ class NAZARA_API NzTaskScheduler template static void AddTask(F function, Args... args); template static void AddTask(void (C::*function)(), C* object); static unsigned int GetWorkerCount(); - static bool Initialize(unsigned int workerCount = NzThread::HardwareConcurrency()); + static bool Initialize(); + static void SetWorkerCount(unsigned int workerCount); static void Uninitialize(); static void WaitForTasks(); diff --git a/include/Nazara/Renderer/Renderer.hpp b/include/Nazara/Renderer/Renderer.hpp index c2bc6833e..1d5d0246d 100644 --- a/include/Nazara/Renderer/Renderer.hpp +++ b/include/Nazara/Renderer/Renderer.hpp @@ -59,7 +59,7 @@ class NAZARA_API NzRenderer static bool HasCapability(nzRendererCap capability); - static bool Initialize(bool initializeDebugDrawer = false); + static bool Initialize(); static bool IsEnabled(nzRendererParameter parameter); static bool IsInitialized(); diff --git a/src/Nazara/Core/Core.cpp b/src/Nazara/Core/Core.cpp index a3f23ed1a..ebe217f1c 100644 --- a/src/Nazara/Core/Core.cpp +++ b/src/Nazara/Core/Core.cpp @@ -10,24 +10,9 @@ #include #include -bool NzCore::Initialize(bool initializeHardwareInfo, bool initializeTaskScheduler) +bool NzCore::Initialize() { - s_moduleReferenceCounter++; - - // Initialisation du module - if (initializeHardwareInfo && !NzHardwareInfo::Initialize()) - NazaraWarning("Failed to initialize hardware info"); // Non-critique - - if (initializeTaskScheduler && !NzTaskScheduler::Initialize()) - { - NazaraError("Failed to initialize task scheduler"); - Uninitialize(); - - return false; - } - - // Vérification après l'initialisation des sous-modules - if (s_moduleReferenceCounter != 1) + if (s_moduleReferenceCounter++ != 0) return true; // Déjà initialisé NazaraNotice("Initialized: Core"); diff --git a/src/Nazara/Core/HardwareInfo.cpp b/src/Nazara/Core/HardwareInfo.cpp index 733a7f021..d157ecc86 100644 --- a/src/Nazara/Core/HardwareInfo.cpp +++ b/src/Nazara/Core/HardwareInfo.cpp @@ -80,6 +80,7 @@ NzString NzHardwareInfo::GetProcessorBrandString() unsigned int NzHardwareInfo::GetProcessorCount() { + ///DOC: Ne nécessite pas l'initialisation de HardwareInfo pour fonctionner static unsigned int processorCount = std::max(NzHardwareInfoImpl::GetProcessorCount(), 1U); return processorCount; } diff --git a/src/Nazara/Core/TaskScheduler.cpp b/src/Nazara/Core/TaskScheduler.cpp index 17c239e75..653a77405 100644 --- a/src/Nazara/Core/TaskScheduler.cpp +++ b/src/Nazara/Core/TaskScheduler.cpp @@ -5,6 +5,7 @@ #include #include #include +#include #include #include #include @@ -19,7 +20,7 @@ namespace struct TaskSchedulerImpl { std::queue tasks; - std::vector workers; + std::vector workers; NzConditionVariable waiterConditionVariable; NzConditionVariable workerConditionVariable; NzMutex taskMutex; @@ -31,6 +32,7 @@ namespace }; TaskSchedulerImpl* s_impl = nullptr; + unsigned int s_workerCount = 0; void WorkerFunc() { @@ -84,31 +86,41 @@ namespace unsigned int NzTaskScheduler::GetWorkerCount() { - #ifdef NAZARA_CORE_SAFE - if (!s_impl) - { - NazaraError("Task scheduler is not initialized"); - return 0; - } - #endif - - return s_impl->workers.size(); + return (s_workerCount > 0) ? s_workerCount : NzHardwareInfo::GetProcessorCount(); } -bool NzTaskScheduler::Initialize(unsigned int workerCount) +bool NzTaskScheduler::Initialize() { if (s_impl) return true; // Déjà initialisé s_impl = new TaskSchedulerImpl; - s_impl->workers.reserve(workerCount); + unsigned int workerCount = GetWorkerCount(); + + s_impl->workers.resize(workerCount); for (unsigned int i = 0; i < workerCount; ++i) - s_impl->workers.push_back(new NzThread(WorkerFunc)); + s_impl->workers[i] = NzThread(WorkerFunc); return true; } +void NzTaskScheduler::SetWorkerCount(unsigned int workerCount) +{ + s_workerCount = workerCount; + if (s_impl) + { + unsigned int newWorkerCount = GetWorkerCount(); + unsigned int oldWorkerCount = s_impl->workers.size(); + s_impl->workers.resize(newWorkerCount); + if (newWorkerCount > oldWorkerCount) + { + for (unsigned int i = oldWorkerCount-1; i < newWorkerCount; ++i) + s_impl->workers[i] = NzThread(WorkerFunc); + } + } +} + void NzTaskScheduler::Uninitialize() { if (s_impl) @@ -130,11 +142,8 @@ void NzTaskScheduler::Uninitialize() s_impl->workerConditionVariable.SignalAll(); s_impl->workerConditionVariableMutex.Unlock(); - for (NzThread* thread : s_impl->workers) - { - thread->Join(); - delete thread; - } + for (NzThread& thread : s_impl->workers) + thread.Join(); delete s_impl; s_impl = nullptr; diff --git a/src/Nazara/Renderer/Renderer.cpp b/src/Nazara/Renderer/Renderer.cpp index 861594e6b..2f9d52609 100644 --- a/src/Nazara/Renderer/Renderer.cpp +++ b/src/Nazara/Renderer/Renderer.cpp @@ -616,15 +616,10 @@ bool NzRenderer::HasCapability(nzRendererCap capability) return s_capabilities[capability]; } -bool NzRenderer::Initialize(bool initializeDebugDrawer) +bool NzRenderer::Initialize() { if (s_moduleReferenceCounter++ != 0) - { - if (initializeDebugDrawer && !NzDebugDrawer::Initialize()) - NazaraWarning("Failed to initialize debug drawer"); // Non-critique - return true; // Déjà initialisé - } // Initialisation des dépendances if (!NzUtility::Initialize()) @@ -761,9 +756,6 @@ bool NzRenderer::Initialize(bool initializeDebugDrawer) s_quadBuffer = new NzVertexBuffer(declaration.get(), 4, nzBufferStorage_Hardware, nzBufferUsage_Dynamic); declaration.release(); - if (initializeDebugDrawer && !NzDebugDrawer::Initialize()) - NazaraWarning("Failed to initialize debug drawer"); // Non-critique - if (!NzShaderBuilder::Initialize()) { NazaraError("Failed to initialize shader builder"); diff --git a/src/Nazara/Utility/Utility.cpp b/src/Nazara/Utility/Utility.cpp index 1d524e676..b2b1f3f52 100644 --- a/src/Nazara/Utility/Utility.cpp +++ b/src/Nazara/Utility/Utility.cpp @@ -5,7 +5,9 @@ #include #include #include +#include #include +#include #include #include #include @@ -23,11 +25,7 @@ bool NzUtility::Initialize() return true; // Déjà initialisé // Initialisation des dépendances - #if NAZARA_UTILITY_MULTITHREADED_SKINNING - if (!NzCore::Initialize(false, true)) - #else if (!NzCore::Initialize()) - #endif { NazaraError("Failed to initialize core module"); Uninitialize(); @@ -36,6 +34,16 @@ bool NzUtility::Initialize() } // Initialisation du module + #if NAZARA_UTILITY_MULTITHREADED_SKINNING + if (!NzTaskScheduler::Initialize()) + { + NazaraError("Failed to initialize task scheduler"); + Uninitialize(); + + return false; + } + #endif + if (!NzBuffer::Initialize()) { NazaraError("Failed to initialize buffers");