From 9f4a82f5692831ad80f515fa831fddfdfe50b7b0 Mon Sep 17 00:00:00 2001 From: sergeyv Date: Wed, 1 Feb 2017 17:50:27 -0800 Subject: Hardware bitmaps: Destroy texture ID generated for the copy Test: manual bug:34807359 Change-Id: Idb1ef2a2efcb3cf7fb96e2a1f0554a06e7cd0fc2 --- libs/hwui/hwui/Bitmap.cpp | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/libs/hwui/hwui/Bitmap.cpp b/libs/hwui/hwui/Bitmap.cpp index a34b61b56334..3e10b36d921d 100644 --- a/libs/hwui/hwui/Bitmap.cpp +++ b/libs/hwui/hwui/Bitmap.cpp @@ -152,6 +152,23 @@ private: EGLDisplay mDisplay = EGL_NO_DISPLAY; }; +class AutoGlTexture { +public: + AutoGlTexture(uirenderer::Caches& caches) + : mCaches(caches) { + glGenTextures(1, &mTexture); + caches.textureState().bindTexture(mTexture); + } + + ~AutoGlTexture() { + mCaches.textureState().deleteTexture(mTexture); + } + +private: + uirenderer::Caches& mCaches; + GLuint mTexture = 0; +}; + static bool uploadBitmapToGraphicBuffer(uirenderer::Caches& caches, SkBitmap& bitmap, GraphicBuffer& buffer, GLint format, GLint type) { SkAutoLockPixels alp(bitmap); @@ -159,10 +176,6 @@ static bool uploadBitmapToGraphicBuffer(uirenderer::Caches& caches, SkBitmap& bi LOG_ALWAYS_FATAL_IF(display == EGL_NO_DISPLAY, "Failed to get EGL_DEFAULT_DISPLAY! err=%s", uirenderer::renderthread::EglManager::eglErrorString()); - // These objects are initialized below but the default "null" - // values are used to cleanup properly at any point in the - // initialization sequenc - GLuint texture = 0; // We use an EGLImage to access the content of the GraphicBuffer // The EGL image is later bound to a 2D texture EGLClientBuffer clientBuffer = (EGLClientBuffer) buffer.getNativeBuffer(); @@ -172,8 +185,7 @@ static bool uploadBitmapToGraphicBuffer(uirenderer::Caches& caches, SkBitmap& bi uirenderer::renderthread::EglManager::eglErrorString()); return false; } - glGenTextures(1, &texture); - caches.textureState().bindTexture(texture); + AutoGlTexture glTexture(caches); glEGLImageTargetTexture2DOES(GL_TEXTURE_2D, autoImage.image); GL_CHECKPOINT(MODERATE); -- cgit v1.2.3-59-g8ed1b