Wrap EGLImage with a C++ API

Change-Id: I0fa3282ea7e2ace3ba2aadd929b32232b3d41628
diff --git a/libs/hwui/AssetAtlas.cpp b/libs/hwui/AssetAtlas.cpp
index cf8cc97..d8c9071 100644
--- a/libs/hwui/AssetAtlas.cpp
+++ b/libs/hwui/AssetAtlas.cpp
@@ -14,14 +14,10 @@
  * limitations under the License.
  */
 
-#define LOG_TAG "OpenGLRenderer"
-
 #include "AssetAtlas.h"
 
 #include <GLES2/gl2ext.h>
 
-#include <utils/Log.h>
-
 namespace android {
 namespace uirenderer {
 
@@ -30,41 +26,26 @@
 ///////////////////////////////////////////////////////////////////////////////
 
 void AssetAtlas::init(sp<GraphicBuffer> buffer, int* map, int count) {
-    if (mImage != EGL_NO_IMAGE_KHR) {
+    if (mImage) {
         return;
     }
 
-    // Create the EGLImage object that maps the GraphicBuffer
-    EGLDisplay display = eglGetDisplay(EGL_DEFAULT_DISPLAY);
-    EGLClientBuffer clientBuffer = (EGLClientBuffer) buffer->getNativeBuffer();
-    EGLint attrs[] = { EGL_IMAGE_PRESERVED_KHR, EGL_TRUE, EGL_NONE };
+    mImage = new Image(buffer);
+    mTexture = mImage->getTexture();
 
-    mImage = eglCreateImageKHR(display, EGL_NO_CONTEXT,
-            EGL_NATIVE_BUFFER_ANDROID, clientBuffer, attrs);
+    if (mTexture) {
+        mWidth = buffer->getWidth();
+        mHeight = buffer->getHeight();
 
-    if (mImage == EGL_NO_IMAGE_KHR) {
-        ALOGW("Error creating atlas image (%#x)", eglGetError());
-        return;
+        createEntries(map, count);
+    } else {
+        delete mImage;
     }
-
-    // Create a 2D texture to sample from the EGLImage
-    glGenTextures(1, &mTexture);
-    glBindTexture(GL_TEXTURE_2D, mTexture);
-    glEGLImageTargetTexture2DOES(GL_TEXTURE_2D, mImage);
-
-    mWidth = buffer->getWidth();
-    mHeight = buffer->getHeight();
-
-    createEntries(map, count);
 }
 
 void AssetAtlas::terminate() {
-    if (mImage != EGL_NO_IMAGE_KHR) {
-        eglDestroyImageKHR(eglGetDisplay(EGL_DEFAULT_DISPLAY), mImage);
-        mImage = EGL_NO_IMAGE_KHR;
-
-        glDeleteTextures(1, &mTexture);
-        mTexture = 0;
+    if (mImage) {
+        delete mImage;
 
         for (size_t i = 0; i < mEntries.size(); i++) {
             delete mEntries.valueAt(i);