diff options
Diffstat (limited to 'libs/rs')
| -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();  }  |