diff options
| author | 2014-06-16 23:37:12 +0000 | |
|---|---|---|
| committer | 2014-06-16 22:13:20 +0000 | |
| commit | 0d28bb47d771a2ac99cec6e4a071a98d2cd705dd (patch) | |
| tree | 9498ed5f334444da66df25d34e47f6c9952eb5df | |
| parent | 5e7ef9489f3247c02395202d88fb4fb425aa8412 (diff) | |
| parent | 4a473c7d9406a2d6f6792f0f48d933424740ec5c (diff) | |
Merge "Fix the texture ID reuse issue in HWUI."
| -rw-r--r-- | libs/hwui/Caches.cpp | 15 | ||||
| -rw-r--r-- | libs/hwui/Caches.h | 5 | ||||
| -rw-r--r-- | libs/hwui/Layer.cpp | 1 |
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; } |