Store EGL images in a namespace.

This allows validating the EGL image handles. It also ensures that on 64-bit
platforms the handles fit in 32-bit so they can be exchanged through 32-bit
applications (e.g. on a 32-bit virtual machine).

Change-Id: Ie02b00edd2cf7fa02b38316ee7d21c22eae720b5
Reviewed-on: https://swiftshader-review.googlesource.com/5500
Tested-by: Nicolas Capens <capn@google.com>
Reviewed-by: Alexis Hétu <sugoi@google.com>
Reviewed-by: Nicolas Capens <capn@google.com>
diff --git a/src/OpenGL/libGLESv2/libGLESv2.cpp b/src/OpenGL/libGLESv2/libGLESv2.cpp
index ec21154..3e040b4 100644
--- a/src/OpenGL/libGLESv2/libGLESv2.cpp
+++ b/src/OpenGL/libGLESv2/libGLESv2.cpp
@@ -35,7 +35,7 @@
 
 #include <limits>
 
-#ifdef ANDROID
+#ifdef __ANDROID__
 #include <cutils/log.h>
 #endif
 
@@ -6682,16 +6682,11 @@
 		return error(GL_INVALID_ENUM);
 	}
 
-	if(!image)
-	{
-		return error(GL_INVALID_OPERATION);
-	}
-
 	es2::Context *context = es2::getContext();
 
 	if(context)
 	{
-		es2::Texture2D *texture = 0;
+		es2::Texture2D *texture = nullptr;
 
 		switch(target)
 		{
@@ -6705,9 +6700,14 @@
 			return error(GL_INVALID_OPERATION);
 		}
 
-		egl::Image *glImage = static_cast<egl::Image*>(image);
+		egl::Image *eglImage = context->getSharedImage(image);
 
-		texture->setImage(glImage);
+		if(!eglImage)
+		{
+			return error(GL_INVALID_OPERATION);
+		}
+
+		texture->setSharedImage(eglImage);
 	}
 }