Avoid resetting the EGL error code on client context retrieval.

BUG=18208531

Change-Id: I0246a6fcfdeefd8c84a28c3d86723d50d3f0cbac
diff --git a/src/OpenGL/libEGL/libEGL.def b/src/OpenGL/libEGL/libEGL.def
index 71a5e67..8b4caf5 100644
--- a/src/OpenGL/libEGL/libEGL.def
+++ b/src/OpenGL/libEGL/libEGL.def
@@ -33,4 +33,8 @@
 	eglTerminate                    @4
 	eglWaitClient                   @16
 	eglWaitGL                       @30
-	eglWaitNative                   @31
\ No newline at end of file
+	eglWaitNative                   @31
+
+	; Functions that don't change the error code, for use by client APIs
+	clientGetCurrentContext
+	clientGetCurrentDisplay
\ No newline at end of file
diff --git a/src/OpenGL/libEGL/main.cpp b/src/OpenGL/libEGL/main.cpp
index 2243fd8..80882ce 100644
--- a/src/OpenGL/libEGL/main.cpp
+++ b/src/OpenGL/libEGL/main.cpp
@@ -255,7 +255,7 @@
     current->context = ctx;

 }

 

-EGLDisplay getCurrentContext()

+EGLContext getCurrentContext()

 {

     Current *current = eglGetCurrent();

 

@@ -318,6 +318,19 @@
 	}

 }

 

+extern "C"

+{

+EGLContext clientGetCurrentContext()

+{

+    return egl::getCurrentContext();

+}

+

+EGLContext clientGetCurrentDisplay()

+{

+    return egl::getCurrentDisplay();

+}

+}

+

 namespace es1

 {

 	egl::Context *(*createContext)(const egl::Config *config, const egl::Context *shareContext) = 0;

diff --git a/src/OpenGL/libGLES_CM/main.cpp b/src/OpenGL/libGLES_CM/main.cpp
index dd18858..8c0558d 100644
--- a/src/OpenGL/libGLES_CM/main.cpp
+++ b/src/OpenGL/libGLES_CM/main.cpp
@@ -50,8 +50,8 @@
 	#endif

 

 	libEGL = loadLibrary(libEGL_lib);

-	egl::getCurrentContext = (egl::Context *(*)())getProcAddress(libEGL, "eglGetCurrentContext");

-	egl::getCurrentDisplay = (egl::Display *(*)())getProcAddress(libEGL, "eglGetCurrentDisplay");

+	egl::getCurrentContext = (egl::Context *(*)())getProcAddress(libEGL, "clientGetCurrentContext");

+	egl::getCurrentDisplay = (egl::Display *(*)())getProcAddress(libEGL, "clientGetCurrentDisplay");

 

     return libEGL != 0;

 }

diff --git a/src/OpenGL/libGLESv2/main.cpp b/src/OpenGL/libGLESv2/main.cpp
index 6252cf8..7d34bdd 100644
--- a/src/OpenGL/libGLESv2/main.cpp
+++ b/src/OpenGL/libGLESv2/main.cpp
@@ -50,8 +50,8 @@
 	#endif

 

 	libEGL = loadLibrary(libEGL_lib);

-	egl::getCurrentContext = (egl::Context *(*)())getProcAddress(libEGL, "eglGetCurrentContext");

-	egl::getCurrentDisplay = (egl::Display *(*)())getProcAddress(libEGL, "eglGetCurrentDisplay");

+	egl::getCurrentContext = (egl::Context *(*)())getProcAddress(libEGL, "clientGetCurrentContext");

+	egl::getCurrentDisplay = (egl::Display *(*)())getProcAddress(libEGL, "clientGetCurrentDisplay");

 

 	#if defined(_WIN32)

 	const char *libGLES_CM_lib[] = {"libGLES_CM.dll", "libGLES_CM_translator.dll"};

diff --git a/src/Radiance/libEGL/libEGL.cpp b/src/Radiance/libEGL/libEGL.cpp
index a726240..6f7903c 100644
--- a/src/Radiance/libEGL/libEGL.cpp
+++ b/src/Radiance/libEGL/libEGL.cpp
Binary files differ
diff --git a/src/Radiance/libEGL/libEGL.def b/src/Radiance/libEGL/libEGL.def
index 71a5e67..8b4caf5 100644
--- a/src/Radiance/libEGL/libEGL.def
+++ b/src/Radiance/libEGL/libEGL.def
@@ -33,4 +33,8 @@
 	eglTerminate                    @4
 	eglWaitClient                   @16
 	eglWaitGL                       @30
-	eglWaitNative                   @31
\ No newline at end of file
+	eglWaitNative                   @31
+
+	; Functions that don't change the error code, for use by client APIs
+	clientGetCurrentContext
+	clientGetCurrentDisplay
\ No newline at end of file
diff --git a/src/Radiance/libEGL/main.cpp b/src/Radiance/libEGL/main.cpp
index 9f43f79..4c84130 100644
--- a/src/Radiance/libEGL/main.cpp
+++ b/src/Radiance/libEGL/main.cpp
@@ -237,7 +237,7 @@
     current->context = ctx;

 }

 

-EGLDisplay getCurrentContext()

+EGLContext getCurrentContext()

 {

     Current *current = eglGetCurrent();

 

@@ -300,6 +300,19 @@
 	}

 }

 

+extern "C"

+{

+EGLContext clientGetCurrentContext()

+{

+    return egl::getCurrentContext();

+}

+

+EGLContext clientGetCurrentDisplay()

+{

+    return egl::getCurrentDisplay();

+}

+}

+

 namespace rad

 {

 	egl::Context *(*createContext)(const egl::Config *config, const egl::Context *shareContext) = 0;

diff --git a/src/Radiance/libRAD/main.cpp b/src/Radiance/libRAD/main.cpp
index 3add27b..0a9fff7 100644
--- a/src/Radiance/libRAD/main.cpp
+++ b/src/Radiance/libRAD/main.cpp
@@ -50,8 +50,8 @@
 	#endif

 

 	libEGL = loadLibrary(libEGL_lib);

-	egl::getCurrentContext = (egl::Context *(*)())getProcAddress(libEGL, "eglGetCurrentContext");

-	egl::getCurrentDisplay = (egl::Display *(*)())getProcAddress(libEGL, "eglGetCurrentDisplay");

+	egl::getCurrentContext = (egl::Context *(*)())getProcAddress(libEGL, "clientGetCurrentContext");

+	egl::getCurrentDisplay = (egl::Display *(*)())getProcAddress(libEGL, "clientGetCurrentDisplay");

 

     return libEGL != 0;

 }