diff --git a/kraken/KRContext.cpp b/kraken/KRContext.cpp index 184633a..37a6869 100755 --- a/kraken/KRContext.cpp +++ b/kraken/KRContext.cpp @@ -106,7 +106,6 @@ KRContext::KRContext(const KrInitializeInfo* initializeInfo) #endif createDeviceContexts(); - glslang::InitializeProcess(); } KRContext::~KRContext() { @@ -171,7 +170,6 @@ KRContext::~KRContext() { delete m_resourceMap; m_resourceMap = NULL; } - glslang::FinalizeProcess(); } void KRContext::SetLogCallback(log_callback *log_callback, void *user_data) diff --git a/kraken/KRShaderManager.cpp b/kraken/KRShaderManager.cpp index d733200..bc4c468 100644 --- a/kraken/KRShaderManager.cpp +++ b/kraken/KRShaderManager.cpp @@ -33,6 +33,7 @@ #include "KREngine-common.h" KRShaderManager::KRShaderManager(KRContext &context) : KRResourceManager(context) +, m_initializedGlslang(false) { } @@ -44,6 +45,9 @@ KRShaderManager::~KRShaderManager() delete (*name_itr).second; } } + if (m_initializedGlslang) { + glslang::FinalizeProcess(); + } } KRResource* KRShaderManager::loadResource(const std::string& name, const std::string& extension, KRDataBlock* data) @@ -118,5 +122,9 @@ const unordered_map &KRShaderManager::get(const std::st bool KRShaderManager::compileAll() { + if (!m_initializedGlslang) { + glslang::InitializeProcess(); + m_initializedGlslang = true; + } return true; } diff --git a/kraken/KRShaderManager.h b/kraken/KRShaderManager.h index 7978d68..02afd9d 100644 --- a/kraken/KRShaderManager.h +++ b/kraken/KRShaderManager.h @@ -61,6 +61,7 @@ public: private: unordered_map > m_shaders; + bool m_initializedGlslang; }; #endif /* defined(KRUNKNOWN_MANAGER_H) */