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);