summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Chris Craik <ccraik@android.com> 2014-06-16 23:37:12 +0000
committer Gerrit Code Review <noreply-gerritcodereview@google.com> 2014-06-16 22:13:20 +0000
commit0d28bb47d771a2ac99cec6e4a071a98d2cd705dd (patch)
tree9498ed5f334444da66df25d34e47f6c9952eb5df
parent5e7ef9489f3247c02395202d88fb4fb425aa8412 (diff)
parent4a473c7d9406a2d6f6792f0f48d933424740ec5c (diff)
Merge "Fix the texture ID reuse issue in HWUI."
-rw-r--r--libs/hwui/Caches.cpp15
-rw-r--r--libs/hwui/Caches.h5
-rw-r--r--libs/hwui/Layer.cpp1
3 files changed, 16 insertions, 5 deletions
diff --git a/libs/hwui/Caches.cpp b/libs/hwui/Caches.cpp
index f8d3589168b6..b0f4c2c7189d 100644
--- a/libs/hwui/Caches.cpp
+++ b/libs/hwui/Caches.cpp
@@ -554,11 +554,8 @@ void Caches::deleteTexture(GLuint texture) {
// call, any texture operation will be performed on the default
// texture (name=0)
- for (int i = 0; i < REQUIRED_TEXTURE_UNITS_COUNT; i++) {
- if (mBoundTextures[i] == texture) {
- mBoundTextures[i] = 0;
- }
- }
+ unbindTexture(texture);
+
glDeleteTextures(1, &texture);
}
@@ -566,6 +563,14 @@ void Caches::resetBoundTextures() {
memset(mBoundTextures, 0, REQUIRED_TEXTURE_UNITS_COUNT * sizeof(GLuint));
}
+void Caches::unbindTexture(GLuint texture) {
+ for (int i = 0; i < REQUIRED_TEXTURE_UNITS_COUNT; i++) {
+ if (mBoundTextures[i] == texture) {
+ mBoundTextures[i] = 0;
+ }
+ }
+}
+
///////////////////////////////////////////////////////////////////////////////
// Scissor
///////////////////////////////////////////////////////////////////////////////
diff --git a/libs/hwui/Caches.h b/libs/hwui/Caches.h
index 282aee901006..544757aac696 100644
--- a/libs/hwui/Caches.h
+++ b/libs/hwui/Caches.h
@@ -264,6 +264,11 @@ public:
void resetBoundTextures();
/**
+ * Clear the cache of bound textures.
+ */
+ void unbindTexture(GLuint texture);
+
+ /**
* Sets the scissor for the current surface.
*/
bool setScissor(GLint x, GLint y, GLint width, GLint height);
diff --git a/libs/hwui/Layer.cpp b/libs/hwui/Layer.cpp
index bd371a3bcef4..987bf03bb863 100644
--- a/libs/hwui/Layer.cpp
+++ b/libs/hwui/Layer.cpp
@@ -171,6 +171,7 @@ void Layer::deleteTexture() {
}
void Layer::clearTexture() {
+ caches.unbindTexture(texture.id);
texture.id = 0;
}