// Copyright (C) 2014 Jérôme Leclercq // This file is part of the "Nazara Engine - Utility module" // For conditions of distribution and use, see copyright notice in Config.hpp #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include bool NzUtility::Initialize() { if (s_moduleReferenceCounter > 0) { s_moduleReferenceCounter++; return true; // Déjà initialisé } // Initialisation des dépendances if (!NzCore::Initialize()) { NazaraError("Failed to initialize core module"); return false; } s_moduleReferenceCounter++; // Initialisation du module NzCallOnExit onExit(NzUtility::Uninitialize); if (!NzBuffer::Initialize()) { NazaraError("Failed to initialize buffers"); return false; } if (!NzPixelFormat::Initialize()) { NazaraError("Failed to initialize pixel formats"); return false; } #if NAZARA_UTILITY_MULTITHREADED_SKINNING if (!NzTaskScheduler::Initialize()) { NazaraError("Failed to initialize task scheduler"); return false; } #endif if (!NzVertexDeclaration::Initialize()) { NazaraError("Failed to initialize vertex declarations"); return false; } if (!NzWindow::Initialize()) { NazaraError("Failed to initialize window's system"); return false; } // On enregistre les loaders pour les extensions // Il s'agit ici d'une liste LIFO, le dernier loader enregistré possède la priorité /// Loaders génériques // Image NzLoaders_STB_Register(); // Loader générique (STB) /// Loaders spécialisés // Animation NzLoaders_MD5Anim_Register(); // Loader de fichiers .md5anim (v10) // Mesh NzLoaders_MD2_Register(); // Loader de fichiers .md2 (v8) NzLoaders_MD5Mesh_Register(); // Loader de fichiers .md5mesh (v10) // Image NzLoaders_PCX_Register(); // Loader de fichiers .pcx (1, 4, 8, 24 bits) onExit.Reset(); NazaraNotice("Initialized: Utility module"); return true; } bool NzUtility::IsInitialized() { return s_moduleReferenceCounter != 0; } void NzUtility::Uninitialize() { if (s_moduleReferenceCounter != 1) { // Le module est soit encore utilisé, soit pas initialisé if (s_moduleReferenceCounter > 1) s_moduleReferenceCounter--; return; } // Libération du module s_moduleReferenceCounter = 0; NzLoaders_MD2_Unregister(); NzLoaders_MD5Anim_Unregister(); NzLoaders_MD5Mesh_Unregister(); NzLoaders_PCX_Unregister(); NzLoaders_STB_Unregister(); NzWindow::Uninitialize(); NzVertexDeclaration::Uninitialize(); NzPixelFormat::Uninitialize(); NzBuffer::Uninitialize(); NazaraNotice("Uninitialized: Utility module"); // Libération des dépendances NzCore::Uninitialize(); } unsigned int NzUtility::s_moduleReferenceCounter = 0;