summaryrefslogtreecommitdiffstats
path: root/libs/hwui/Caches.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'libs/hwui/Caches.cpp')
-rw-r--r--libs/hwui/Caches.cpp21
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
///////////////////////////////////////////////////////////////////////////////