diff options
| author | 2017-02-02 07:27:09 +0000 | |
|---|---|---|
| committer | 2017-02-02 07:27:14 +0000 | |
| commit | f2ca8e030c4e65dcd9d7d021cca296fec85320b7 (patch) | |
| tree | a55334f37f89953d7ea52a6122c8d18dd7ba4d70 /libs | |
| parent | 82c8e5c9602214e24dd5b6940d2c81bf1d4f6a2c (diff) | |
| parent | 9f4a82f5692831ad80f515fa831fddfdfe50b7b0 (diff) | |
Merge "Hardware bitmaps: Destroy texture ID generated for the copy"
Diffstat (limited to 'libs')
| -rw-r--r-- | libs/hwui/hwui/Bitmap.cpp | 24 |
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); |