diff options
| -rw-r--r-- | libs/rs/rsContext.cpp | 1 | ||||
| -rw-r--r-- | libs/rs/rsShaderCache.cpp | 10 |
2 files changed, 7 insertions, 4 deletions
diff --git a/libs/rs/rsContext.cpp b/libs/rs/rsContext.cpp index 22c73fec491c..c437d72fb070 100644 --- a/libs/rs/rsContext.cpp +++ b/libs/rs/rsContext.cpp @@ -535,6 +535,7 @@ void Context::destroyWorkerThreadResources() { mStateFragment.deinit(this); mStateFragmentStore.deinit(this); mStateFont.deinit(this); + mShaderCache.cleanupAll(); } ObjectBase::zeroAllUserRef(this); LOGV("destroyWorkerThreadResources 2"); diff --git a/libs/rs/rsShaderCache.cpp b/libs/rs/rsShaderCache.cpp index 45384c98f247..b958021b37a8 100644 --- a/libs/rs/rsShaderCache.cpp +++ b/libs/rs/rsShaderCache.cpp @@ -32,10 +32,7 @@ ShaderCache::ShaderCache() { } ShaderCache::~ShaderCache() { - for (uint32_t ct=0; ct < mEntries.size(); ct++) { - glDeleteProgram(mEntries[ct]->program); - free(mEntries[ct]); - } + cleanupAll(); } void ShaderCache::updateUniformArrayData(Context *rsc, Program *prog, uint32_t linkedID, @@ -251,5 +248,10 @@ void ShaderCache::cleanupFragment(uint32_t id) { } void ShaderCache::cleanupAll() { + for (uint32_t ct=0; ct < mEntries.size(); ct++) { + glDeleteProgram(mEntries[ct]->program); + free(mEntries[ct]); + } + mEntries.clear(); } |