Implemented glGetActiveUniform
TRAC #11929
Signed-off-by: Shannon Woods
Signed-off-by: Daniel Koch

Author:    Nicolas Capens

git-svn-id: https://angleproject.googlecode.com/svn/trunk@181 736b8ea6-26fd-11df-bfd4-992fa37f6226
diff --git a/src/libGLESv2/libGLESv2.cpp b/src/libGLESv2/libGLESv2.cpp
index 9f70ace..516ec8c 100644
--- a/src/libGLESv2/libGLESv2.cpp
+++ b/src/libGLESv2/libGLESv2.cpp
@@ -1899,7 +1899,7 @@
                 }
             }
 
-            if (index >= programObject->getActiveAttributeCount())
+            if (index >= (GLuint)programObject->getActiveAttributeCount())
             {
                 return error(GL_INVALID_VALUE);
             }
@@ -1926,7 +1926,31 @@
             return error(GL_INVALID_VALUE);
         }
 
-        UNIMPLEMENTED();   // FIXME
+        gl::Context *context = gl::getContext();
+
+        if (context)
+        {
+            gl::Program *programObject = context->getProgram(program);
+
+            if (!programObject)
+            {
+                if (context->getShader(program))
+                {
+                    return error(GL_INVALID_OPERATION);
+                }
+                else
+                {
+                    return error(GL_INVALID_VALUE);
+                }
+            }
+
+            if (index >= (GLuint)programObject->getActiveUniformCount())
+            {
+                return error(GL_INVALID_VALUE);
+            }
+
+            programObject->getActiveUniform(index, bufsize, length, size, type, name);
+        }
     }
     catch(std::bad_alloc&)
     {
@@ -2330,12 +2354,10 @@
                 *params = programObject->getActiveAttributeMaxLength();
                 return;
               case GL_ACTIVE_UNIFORMS:
-                UNIMPLEMENTED();   // FIXME
-                *params = 0;
+                *params = programObject->getActiveUniformCount();
                 return;
               case GL_ACTIVE_UNIFORM_MAX_LENGTH:
-                UNIMPLEMENTED();   // FIXME
-                *params = 0;
+                *params = programObject->getActiveUniformMaxLength();
                 return;
               default:
                 return error(GL_INVALID_ENUM);