diff --git a/src/main/cpp/gl/glsl/cache.cpp b/src/main/cpp/gl/glsl/cache.cpp index cb3d388..7dc55d2 100644 --- a/src/main/cpp/gl/glsl/cache.cpp +++ b/src/main/cpp/gl/glsl/cache.cpp @@ -150,33 +150,42 @@ void Cache::maintainCacheSize() { bool Cache::load() { - ifstream file(GLSL_CACHE_FILE_PATH, ios::binary); - if (!file) return false; - - size_t count; - file.read(reinterpret_cast(&count), sizeof(count)); - - while (count--) { - array hash{}; - size_t esslSize; - - file.read(reinterpret_cast(hash.data()), hash.size()); - file.read(reinterpret_cast(&esslSize), sizeof(esslSize)); - - string essl(esslSize, '\0'); - file.read(essl.data(), (long)esslSize); - - if (cacheMap.count(hash)) continue; - - size_t entryMemory = sizeof(CacheEntry::sha256) + sizeof(size_t) + esslSize; - cacheSize += entryMemory; - - cacheList.emplace_back(CacheEntry{hash, move(essl), esslSize}); - cacheMap[hash] = prev(cacheList.end()); + try { + ifstream file(GLSL_CACHE_FILE_PATH, ios::binary); + if (!file) return false; + + size_t count; + file.read(reinterpret_cast(&count), sizeof(count)); + + while (count--) { + array hash{}; + size_t esslSize; + + file.read(reinterpret_cast(hash.data()), hash.size()); + file.read(reinterpret_cast(&esslSize), sizeof(esslSize)); + + string essl(esslSize, '\0'); + file.read(essl.data(), (long)esslSize); + + if (cacheMap.count(hash)) continue; + + size_t entryMemory = sizeof(CacheEntry::sha256) + sizeof(size_t) + esslSize; + cacheSize += entryMemory; + + cacheList.emplace_back(CacheEntry{hash, move(essl), esslSize}); + cacheMap[hash] = prev(cacheList.end()); + } + + maintainCacheSize(); + return true; + } catch (...) { + LOG_W_FORCE("Error while loading glsl cache file. Clearing it...") + cacheMap.clear(); + cacheSize = 0; + cacheList.clear(); + save(); + return false; } - - maintainCacheSize(); - return true; } diff --git a/src/main/cpp/gl/glsl/glsl_for_es.cpp b/src/main/cpp/gl/glsl/glsl_for_es.cpp index ad912cb..9c6e47e 100644 --- a/src/main/cpp/gl/glsl/glsl_for_es.cpp +++ b/src/main/cpp/gl/glsl/glsl_for_es.cpp @@ -578,7 +578,7 @@ char* GLSLtoGLSLES(char* glsl_code, GLenum glsl_type, uint essl_version, uint gl char* converted = glsl_version<140?GLSLtoGLSLES_1(glsl_code, glsl_type, essl_version):GLSLtoGLSLES_2(glsl_code, glsl_type, essl_version); if (converted && isGlslConvertedSuccessfully) { converted = process_uniform_declarations(converted); - glslCache.put(sha256_string.c_str(), converted); + glslCache.put(sha256_string.c_str(), converted); } return converted ? converted : glsl_code; }