diff options
Diffstat (limited to 'libs/hwui/Caches.cpp')
-rw-r--r-- | libs/hwui/Caches.cpp | 21 |
1 files changed, 18 insertions, 3 deletions
diff --git a/libs/hwui/Caches.cpp b/libs/hwui/Caches.cpp index cef2c84..03b8283 100644 --- a/libs/hwui/Caches.cpp +++ b/libs/hwui/Caches.cpp @@ -72,9 +72,8 @@ bool Caches::init() { ATRACE_NAME("Caches::init"); - mRegionMesh = nullptr; - currentProgram = nullptr; + mProgram = nullptr; mFunctorsCount = 0; @@ -200,7 +199,7 @@ void Caches::terminate() { fboCache.clear(); programCache.clear(); - currentProgram = nullptr; + setProgram(nullptr); patchCache.clear(); @@ -213,6 +212,22 @@ void Caches::terminate() { mInitialized = false; } +void Caches::setProgram(const ProgramDescription& description) { + setProgram(programCache.get(description)); +} + +void Caches::setProgram(Program* program) { + if (!program || !program->isInUse()) { + if (mProgram) { + mProgram->remove(); + } + if (program) { + program->use(); + } + mProgram = program; + } +} + /////////////////////////////////////////////////////////////////////////////// // Debug /////////////////////////////////////////////////////////////////////////////// |