Implemented eglGetProcAddress
TRAC #12102
Signed-off-by: Andrew Lewycky
Signed-off-by: Daniel Koch

Author:    Nicolas Capens

git-svn-id: http://angleproject.googlecode.com/svn/trunk@223 736b8ea6-26fd-11df-bfd4-992fa37f6226
diff --git a/src/libEGL/libEGL.cpp b/src/libEGL/libEGL.cpp
index f9a7311..3c58f23 100644
--- a/src/libEGL/libEGL.cpp
+++ b/src/libEGL/libEGL.cpp
@@ -1030,9 +1030,26 @@
 
     try
     {
-        UNIMPLEMENTED();   // FIXME
+        struct Extension
+        {
+            const char *name;
+            __eglMustCastToProperFunctionPointerType address;
+        };
 
-        return NULL;
+        static const Extension eglExtensions[] =
+        {
+            {"", NULL},
+        };
+
+        for (int ext = 0; ext < sizeof(eglExtensions) / sizeof(Extension); ext++)
+        {
+            if (strcmp(procname, eglExtensions[ext].name) == 0)
+            {
+                return (__eglMustCastToProperFunctionPointerType)eglExtensions[ext].address;
+            }
+        }
+
+        return glGetProcAddress(procname);
     }
     catch(std::bad_alloc&)
     {
diff --git a/src/libGLESv2/Context.h b/src/libGLESv2/Context.h
index daf962a..fa0ed7b 100644
--- a/src/libGLESv2/Context.h
+++ b/src/libGLESv2/Context.h
@@ -365,6 +365,7 @@
 void glDestroyContext(gl::Context *context);
 void glMakeCurrent(gl::Context *context, egl::Display *display, egl::Surface *surface);
 gl::Context *glGetCurrentContext();
+__eglMustCastToProperFunctionPointerType __stdcall glGetProcAddress(const char *procname);
 }
 
 #endif   // INCLUDE_CONTEXT_H_
diff --git a/src/libGLESv2/libGLESv2.cpp b/src/libGLESv2/libGLESv2.cpp
index 5b1ab7b..33009a8 100644
--- a/src/libGLESv2/libGLESv2.cpp
+++ b/src/libGLESv2/libGLESv2.cpp
@@ -5040,4 +5040,29 @@
         return error(GL_OUT_OF_MEMORY);
     }
 }
+
+__eglMustCastToProperFunctionPointerType __stdcall glGetProcAddress(const char *procname)
+{
+    struct Extension
+    {
+        const char *name;
+        __eglMustCastToProperFunctionPointerType address;
+    };
+
+    static const Extension glExtensions[] =
+    {
+        {"glTexImage3DOES", (__eglMustCastToProperFunctionPointerType)glTexImage3DOES},
+    };
+
+    for (int ext = 0; ext < sizeof(glExtensions) / sizeof(Extension); ext++)
+    {
+        if (strcmp(procname, glExtensions[ext].name) == 0)
+        {
+            return (__eglMustCastToProperFunctionPointerType)glExtensions[ext].address;
+        }
+    }
+
+    return NULL;
+}
+
 }
diff --git a/src/libGLESv2/libGLESv2.def b/src/libGLESv2/libGLESv2.def
index 6ec8bb1..0aaaa67 100644
--- a/src/libGLESv2/libGLESv2.def
+++ b/src/libGLESv2/libGLESv2.def
@@ -150,4 +150,5 @@
     glCreateContext					@144 NONAME
     glDestroyContext				@145 NONAME
     glMakeCurrent					@146 NONAME
-    glGetCurrentContext				@147 NONAME
\ No newline at end of file
+    glGetCurrentContext				@147 NONAME
+    glGetProcAddress                @148 NONAME
\ No newline at end of file