Module can now initialize optionnal classes

Former-commit-id: 899007b7879451d15d0808a03b8dfea0cd3413a4
This commit is contained in:
Lynix 2012-12-08 22:21:20 +01:00
parent e8842f1ba8
commit 8376fb38cf
4 changed files with 22 additions and 12 deletions

View File

@ -16,7 +16,7 @@ class NAZARA_API NzCore
NzCore() = delete;
~NzCore() = delete;
static bool Initialize();
static bool Initialize(bool initializeHardwareInfo = true, bool initializeTaskScheduler = true);
static bool IsInitialized();

View File

@ -52,7 +52,7 @@ class NAZARA_API NzRenderer
static bool HasCapability(nzRendererCap capability);
static bool Initialize();
static bool Initialize(bool initializeDebugDrawer = false);
static bool IsEnabled(nzRendererParameter parameter);
static bool IsInitialized();

View File

@ -5,17 +5,28 @@
#include <Nazara/Core/Core.hpp>
#include <Nazara/Core/Config.hpp>
#include <Nazara/Core/Error.hpp>
#include <Nazara/Core/HardwareInfo.hpp>
#include <Nazara/Core/Log.hpp>
#include <Nazara/Core/TaskScheduler.hpp>
#include <Nazara/Core/Debug.hpp>
bool NzCore::Initialize()
bool NzCore::Initialize(bool initializeHardwareInfo, bool initializeTaskScheduler)
{
if (s_moduleReferenceCounter++ != 0)
return true; // Déjà initialisé
// Initialisation du module
// Le noyau de Nazara n'a pour l'instant aucun besoin d'initialisation, mais dans le futur il est très probable que ce soit le cas.
// Donc en prévision, tous les modules initialisent le noyau
if (initializeHardwareInfo && !NzHardwareInfo::Initialize())
{
NazaraError("Failed to initialize hardware info");
return false;
}
if (initializeTaskScheduler && !NzTaskScheduler::Initialize())
{
NazaraError("Failed to initialize task scheduler");
return false;
}
NazaraNotice("Initialized: Core");
@ -41,6 +52,9 @@ void NzCore::Uninitialize()
// Libération du module
s_moduleReferenceCounter = 0;
NzHardwareInfo::Uninitialize();
NzTaskScheduler::Uninitialize();
NazaraNotice("Uninitialized: Core");
}

View File

@ -397,7 +397,7 @@ bool NzRenderer::HasCapability(nzRendererCap capability)
return s_capabilities[capability];
}
bool NzRenderer::Initialize()
bool NzRenderer::Initialize(bool initializeDebugDrawer)
{
if (s_moduleReferenceCounter++ != 0)
return true; // Déjà initialisé
@ -497,10 +497,8 @@ bool NzRenderer::Initialize()
NzBuffer::SetBufferFunction(nzBufferStorage_Hardware, HardwareBufferFunction);
#ifdef NAZARA_DEBUG
if (!NzDebugDrawer::Initialize())
NazaraWarning("Failed to initialize debug drawer");
#endif
if (initializeDebugDrawer && !NzDebugDrawer::Initialize())
NazaraWarning("Failed to initialize debug drawer"); // Non-critique
// Loaders
NzLoaders_Texture_Register();
@ -1001,9 +999,7 @@ void NzRenderer::Uninitialize()
// Loaders
NzLoaders_Texture_Unregister();
#ifdef NAZARA_DEBUG
NzDebugDrawer::Uninitialize();
#endif
NzContext::EnsureContext();