summaryrefslogtreecommitdiff
path: root/libs
diff options
context:
space:
mode:
author Sergei Vasilinetc <sergeyv@google.com> 2017-02-02 07:27:09 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2017-02-02 07:27:14 +0000
commitf2ca8e030c4e65dcd9d7d021cca296fec85320b7 (patch)
treea55334f37f89953d7ea52a6122c8d18dd7ba4d70 /libs
parent82c8e5c9602214e24dd5b6940d2c81bf1d4f6a2c (diff)
parent9f4a82f5692831ad80f515fa831fddfdfe50b7b0 (diff)
Merge "Hardware bitmaps: Destroy texture ID generated for the copy"
Diffstat (limited to 'libs')
-rw-r--r--libs/hwui/hwui/Bitmap.cpp24
1 files 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);