void Sdk::Uninitialize() { if (s_referenceCounter != 1) { // Either the module is not initialized, either it was initialized multiple times if (s_referenceCounter > 1) s_referenceCounter--; return; } // Uninitialize the SDK s_referenceCounter = 0; // Uninitialize the engine #ifndef NDK_SERVER // Client modules Nz::Audio::Uninitialize(); Nz::Graphics::Uninitialize(); #endif // Shared modules Nz::Lua::Uninitialize(); Nz::Noise::Uninitialize(); Nz::Physics::Uninitialize(); Nz::Utility::Uninitialize(); NazaraNotice("Uninitialized: SDK"); }
bool ModuleName::Initialize() { if (s_moduleReferenceCounter > 0) { s_moduleReferenceCounter++; return true; // Already initialized } // Initialize module dependencies if (!Core::Initialize()) { NazaraError("Failed to initialize core module"); return false; } s_moduleReferenceCounter++; CallOnExit onExit(ModuleName::Uninitialize); // Initialize module here onExit.Reset(); NazaraNotice("Initialized: ModuleName module"); return true; }
bool NzAudio::Initialize() { if (s_moduleReferenceCounter++ != 0) return true; // Déjà initialisé // Initialisation des dépendances if (!NzCore::Initialize()) { NazaraError("Failed to initialize core module"); Uninitialize(); return false; } // Initialisation d'OpenGL if (!NzOpenAL::Initialize()) { NazaraError("Failed to initialize OpenAL"); Uninitialize(); return false; } // Définition de l'orientation par défaut SetListenerDirection(NzVector3f::Forward()); // Loaders NzLoaders_sndfile_Register(); NazaraNotice("Initialized: Audio module"); return true; }
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(); }
void NzGraphics::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; // Libération de l'atlas s'il vient de nous std::shared_ptr<NzAbstractAtlas> defaultAtlas = NzFont::GetDefaultAtlas(); if (defaultAtlas && defaultAtlas->GetStorage() & nzDataStorage_Hardware) { NzFont::SetDefaultAtlas(nullptr); // La police par défaut peut faire vivre un atlas hardware après la libération du module (ce qui va être problématique) // du coup, si la police par défaut utilise un atlas hardware, on lui enlève. // Je n'aime pas cette solution mais je n'en ai pas de meilleure sous la main pour l'instant if (!defaultAtlas.unique()) { // Encore au moins une police utilise l'atlas NzFont* defaultFont = NzFont::GetDefault(); defaultFont->SetAtlas(nullptr); if (!defaultAtlas.unique()) { // Toujours pas seuls propriétaires ? Ah ben zut. NazaraWarning("Default font atlas uses hardware storage and is still used"); } } } defaultAtlas.reset(); // Loaders NzLoaders_Mesh_Unregister(); NzLoaders_OBJ_Unregister(); NzLoaders_Texture_Unregister(); NzDeferredRenderTechnique::Uninitialize(); NzForwardRenderTechnique::Uninitialize(); NzSkinningManager::Uninitialize(); NzParticleRenderer::Uninitialize(); NzParticleGenerator::Uninitialize(); NzParticleDeclaration::Uninitialize(); NzParticleController::Uninitialize(); NzMaterial::Uninitialize(); NazaraNotice("Uninitialized: Graphics module"); // Libération des dépendances NzRenderer::Uninitialize(); }
bool NzCore::Initialize() { if (s_moduleReferenceCounter > 0) { s_moduleReferenceCounter++; return true; // Déjà initialisé } s_moduleReferenceCounter++; NazaraNotice("Initialized: Core"); return true; }
bool NzLua::Initialize() { if (s_moduleReferenceCounter++ != 0) return true; // Déjà initialisé // Initialisation des dépendances if (!NzCore::Initialize()) { NazaraError("Failed to initialize core module"); return false; } // Initialisation du module NazaraNotice("Initialized: Lua module"); return true; }
void NzLua::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; NazaraNotice("Uninitialized: Lua module"); // Libération des dépendances NzCore::Uninitialize(); }
void NzCore::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; NzHardwareInfo::Uninitialize(); NzPluginManager::Uninitialize(); NzTaskScheduler::Uninitialize(); NazaraNotice("Uninitialized: Core"); }
void ModuleName::Uninitialize() { if (s_moduleReferenceCounter != 1) { // Either the module is not initialized, either it was initialized multiple times if (s_moduleReferenceCounter > 1) s_moduleReferenceCounter--; return; } s_moduleReferenceCounter = 0; // Uninitialize module here NazaraNotice("Uninitialized: ModuleName module"); // Free module dependencies Core::Uninitialize(); }
bool NzPhysics::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 NazaraNotice("Initialized: Physics module"); return true; }
void Network::Uninitialize() { if (s_moduleReferenceCounter != 1) { // Either the module is not initialized, either it was initialized multiple times if (s_moduleReferenceCounter > 1) s_moduleReferenceCounter--; return; } s_moduleReferenceCounter = 0; // Uninitialize module here NetPacket::Uninitialize(); SocketImpl::Uninitialize(); NazaraNotice("Uninitialized: Network module"); // Free module dependencies Core::Uninitialize(); }
bool Network::Initialize() { if (s_moduleReferenceCounter > 0) { s_moduleReferenceCounter++; return true; // Already initialized } // Initialize module dependencies if (!Core::Initialize()) { NazaraError("Failed to initialize core module"); return false; } s_moduleReferenceCounter++; CallOnExit onExit(Network::Uninitialize); // Initialize module here if (!SocketImpl::Initialize()) { NazaraError("Failed to initialize socket implementation"); return false; } if (!NetPacket::Initialize()) { NazaraError("Failed to initialize packets"); return false; } onExit.Reset(); NazaraNotice("Initialized: Network module"); return true; }
void NzAudio::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; // Loaders NzLoaders_sndfile_Unregister(); NzOpenAL::Uninitialize(); NazaraNotice("Uninitialized: Audio module"); // Libération des dépendances NzCore::Uninitialize(); }
bool NzGraphics::Initialize() { if (s_moduleReferenceCounter > 0) { s_moduleReferenceCounter++; return true; // Déjà initialisé } // Initialisation des dépendances if (!NzRenderer::Initialize()) { NazaraError("Failed to initialize Renderer module"); return false; } s_moduleReferenceCounter++; // Initialisation du module NzCallOnExit onExit(NzGraphics::Uninitialize); if (!NzMaterial::Initialize()) { NazaraError("Failed to initialize materials"); 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"); return false; } // Loaders NzLoaders_OBJ_Register(); // Loaders génériques NzLoaders_Mesh_Register(); NzLoaders_Texture_Register(); // RenderTechniques if (!NzForwardRenderTechnique::Initialize()) { NazaraError("Failed to initialize Forward Rendering"); return false; } NzRenderTechniques::Register(NzRenderTechniques::ToString(nzRenderTechniqueType_BasicForward), 0, []() -> NzAbstractRenderTechnique* { return new NzForwardRenderTechnique; }); if (NzDeferredRenderTechnique::IsSupported()) { if (NzDeferredRenderTechnique::Initialize()) NzRenderTechniques::Register(NzRenderTechniques::ToString(nzRenderTechniqueType_DeferredShading), 20, []() -> NzAbstractRenderTechnique* { return new NzDeferredRenderTechnique; }); else { NazaraWarning("Failed to initialize Deferred Rendering"); } } NzFont::SetDefaultAtlas(std::make_shared<NzGuillotineTextureAtlas>()); onExit.Reset(); NazaraNotice("Initialized: Graphics module"); return true; }
bool Sdk::Initialize() { if (s_referenceCounter++ > 0) return true; // Already initialized try { Nz::ErrorFlags errFlags(Nz::ErrorFlag_ThrowException, true); // Initialize the engine first // Shared modules Nz::Lua::Initialize(); Nz::Noise::Initialize(); Nz::Physics::Initialize(); Nz::Utility::Initialize(); #ifndef NDK_SERVER // Client modules Nz::Audio::Initialize(); Nz::Graphics::Initialize(); #endif // SDK Initialization // Components BaseComponent::Initialize(); // Shared components InitializeComponent<CollisionComponent>("NdkColli"); InitializeComponent<NodeComponent>("NdkNode"); InitializeComponent<PhysicsComponent>("NdkPhys"); InitializeComponent<VelocityComponent>("NdkVeloc"); #ifndef NDK_SERVER // Client components InitializeComponent<CameraComponent>("NdkCam"); InitializeComponent<LightComponent>("NdkLight"); InitializeComponent<ListenerComponent>("NdkList"); InitializeComponent<GraphicsComponent>("NdkGfx"); #endif // Systems BaseSystem::Initialize(); // Shared systems InitializeSystem<PhysicsSystem>(); InitializeSystem<VelocitySystem>(); #ifndef NDK_SERVER // Client systems InitializeSystem<ListenerSystem>(); InitializeSystem<RenderSystem>(); #endif NazaraNotice("Initialized: SDK"); return true; } catch (const std::exception& e) { NazaraError("Failed to initialize NDK: " + Nz::String(e.what())); return false; } }
bool Graphics::Initialize() { if (IsInitialized()) { s_moduleReferenceCounter++; return true; // Already initialized } // Initialisation of dependances if (!Renderer::Initialize()) { NazaraError("Failed to initialize Renderer module"); return false; } s_moduleReferenceCounter++; // Initialisation of the module CallOnExit onExit(Graphics::Uninitialize); // Materials if (!MaterialPipeline::Initialize()) { NazaraError("Failed to initialize material pipelines"); return false; } if (!Material::Initialize()) { NazaraError("Failed to initialize materials"); return false; } // Renderables if (!ParticleController::Initialize()) { NazaraError("Failed to initialize particle controllers"); return false; } if (!ParticleDeclaration::Initialize()) { NazaraError("Failed to initialize particle declarations"); return false; } if (!ParticleGenerator::Initialize()) { NazaraError("Failed to initialize particle generators"); return false; } if (!ParticleRenderer::Initialize()) { NazaraError("Failed to initialize particle renderers"); return false; } if (!SkinningManager::Initialize()) { NazaraError("Failed to initialize skinning manager"); return false; } if (!SkyboxBackground::Initialize()) { NazaraError("Failed to initialize skybox backgrounds"); return false; } if (!Sprite::Initialize()) { NazaraError("Failed to initialize sprites"); return false; } if (!TileMap::Initialize()) { NazaraError("Failed to initialize tilemaps"); return false; } // Generic loaders Loaders::RegisterMesh(); Loaders::RegisterTexture(); // Render techniques if (!DepthRenderTechnique::Initialize()) { NazaraError("Failed to initialize Depth Rendering"); return false; } if (!ForwardRenderTechnique::Initialize()) { NazaraError("Failed to initialize Forward Rendering"); return false; } RenderTechniques::Register(RenderTechniques::ToString(RenderTechniqueType_BasicForward), 0, []() -> AbstractRenderTechnique* { return new ForwardRenderTechnique; }); if (DeferredRenderTechnique::IsSupported()) { if (DeferredRenderTechnique::Initialize()) RenderTechniques::Register(RenderTechniques::ToString(RenderTechniqueType_DeferredShading), 20, []() -> AbstractRenderTechnique* { return new DeferredRenderTechnique; }); else { NazaraWarning("Failed to initialize Deferred Rendering"); } } Font::SetDefaultAtlas(std::make_shared<GuillotineTextureAtlas>()); // Textures std::array<UInt8, 6> whitePixels = { { 255, 255, 255, 255, 255, 255 } }; Nz::TextureRef whiteTexture = Nz::Texture::New(); whiteTexture->Create(ImageType_2D, PixelFormatType_L8, 1, 1); whiteTexture->Update(whitePixels.data()); TextureLibrary::Register("White2D", std::move(whiteTexture)); Nz::TextureRef whiteCubemap = Nz::Texture::New(); whiteCubemap->Create(ImageType_Cubemap, PixelFormatType_L8, 1, 1); whiteCubemap->Update(whitePixels.data()); TextureLibrary::Register("WhiteCubemap", std::move(whiteCubemap)); onExit.Reset(); NazaraNotice("Initialized: Graphics module"); return true; }
void Graphics::Uninitialize() { if (s_moduleReferenceCounter != 1) { // The module is still in use, or can not be uninitialized if (s_moduleReferenceCounter > 1) s_moduleReferenceCounter--; return; } // Free of module s_moduleReferenceCounter = 0; // Free of atlas if it is ours std::shared_ptr<AbstractAtlas> defaultAtlas = Font::GetDefaultAtlas(); if (defaultAtlas && defaultAtlas->GetStorage() == DataStorage_Hardware) { Font::SetDefaultAtlas(nullptr); // The default police can make live one hardware atlas after the free of a module (which could be problematic) // So, if the default police use a hardware atlas, we stole it. // I don't like this solution, but I don't have any better if (!defaultAtlas.unique()) { // Still at least one police use the atlas Font* defaultFont = Font::GetDefault(); defaultFont->SetAtlas(nullptr); if (!defaultAtlas.unique()) { // Still not the only one to own it ? Then crap. NazaraWarning("Default font atlas uses hardware storage and is still used"); } } } defaultAtlas.reset(); // Textures TextureLibrary::Unregister("White2D"); TextureLibrary::Unregister("WhiteCubemap"); // Loaders Loaders::UnregisterMesh(); Loaders::UnregisterTexture(); // Renderables ParticleRenderer::Uninitialize(); ParticleGenerator::Uninitialize(); ParticleDeclaration::Uninitialize(); ParticleController::Uninitialize(); SkyboxBackground::Uninitialize(); Sprite::Uninitialize(); TileMap::Uninitialize(); // Render techniques DeferredRenderTechnique::Uninitialize(); DepthRenderTechnique::Uninitialize(); ForwardRenderTechnique::Uninitialize(); SkinningManager::Uninitialize(); // Materials Material::Uninitialize(); MaterialPipeline::Uninitialize(); NazaraNotice("Uninitialized: Graphics module"); // Free of dependances Renderer::Uninitialize(); }
bool NzUtility::Initialize() { if (s_moduleReferenceCounter++ != 0) return true; // Déjà initialisé // Initialisation des dépendances if (!NzCore::Initialize()) { NazaraError("Failed to initialize core module"); Uninitialize(); return false; } // 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"); Uninitialize(); return false; } if (!NzPixelFormat::Initialize()) { NazaraError("Failed to initialize pixel formats"); Uninitialize(); return false; } if (!NzVertexDeclaration::Initialize()) { NazaraError("Failed to initialize vertex declarations"); Uninitialize(); return false; } if (!NzWindow::Initialize()) { NazaraError("Failed to initialize window's system"); Uninitialize(); 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) NazaraNotice("Initialized: Utility module"); return true; }