Add support for glGetnUniform*vEXT
Trac #18608
Signed-off-by: Nicolas Capens
git-svn-id: https://angleproject.googlecode.com/svn/trunk@870 736b8ea6-26fd-11df-bfd4-992fa37f6226
diff --git a/src/libGLESv2/Program.cpp b/src/libGLESv2/Program.cpp
index 75a00f0..d8d3921 100644
--- a/src/libGLESv2/Program.cpp
+++ b/src/libGLESv2/Program.cpp
@@ -911,7 +911,7 @@
return true;
}
-bool Program::getUniformfv(GLint location, GLfloat *params)
+bool Program::getUniformfv(GLint location, GLsizei *bufSize, GLfloat *params)
{
if (location < 0 || location >= (int)mUniformIndex.size())
{
@@ -920,6 +920,16 @@
Uniform *targetUniform = mUniforms[mUniformIndex[location].index];
+ // sized queries -- ensure the provided buffer is large enough
+ if (bufSize)
+ {
+ int requiredBytes = UniformExternalSize(targetUniform->type);
+ if (*bufSize < requiredBytes)
+ {
+ return false;
+ }
+ }
+
switch (targetUniform->type)
{
case GL_FLOAT_MAT2:
@@ -970,7 +980,7 @@
return true;
}
-bool Program::getUniformiv(GLint location, GLint *params)
+bool Program::getUniformiv(GLint location, GLsizei *bufSize, GLint *params)
{
if (location < 0 || location >= (int)mUniformIndex.size())
{
@@ -979,6 +989,16 @@
Uniform *targetUniform = mUniforms[mUniformIndex[location].index];
+ // sized queries -- ensure the provided buffer is large enough
+ if (bufSize)
+ {
+ int requiredBytes = UniformExternalSize(targetUniform->type);
+ if (*bufSize < requiredBytes)
+ {
+ return false;
+ }
+ }
+
switch (targetUniform->type)
{
case GL_FLOAT_MAT2: