Add support for unsigned int uniform types to the getUniform series of methods.

TRAC #22845 Signed-off-by: Geoff Lang Signed-off-by: Shanon Woods Author: Jamie Madill git-svn-id: https://angleproject.googlecode.com/svn/branches/es3proto@2148 736b8ea6-26fd-11df-bfd4-992fa37f6226
parent 4590d89d
...@@ -641,6 +641,17 @@ bool ProgramBinary::getUniformv(GLint location, GLsizei *bufSize, T *params, GLe ...@@ -641,6 +641,17 @@ bool ProgramBinary::getUniformv(GLint location, GLsizei *bufSize, T *params, GLe
} }
break; break;
case GL_UNSIGNED_INT:
{
GLuint *uintParams = (GLuint*)targetUniform->data + mUniformIndex[location].element * 4;
for (unsigned int i = 0; i < size; i++)
{
params[i] = static_cast<T>(uintParams[i]);
}
}
break;
default: UNREACHABLE(); default: UNREACHABLE();
} }
} }
...@@ -658,6 +669,11 @@ bool ProgramBinary::getUniformiv(GLint location, GLsizei *bufSize, GLint *params ...@@ -658,6 +669,11 @@ bool ProgramBinary::getUniformiv(GLint location, GLsizei *bufSize, GLint *params
return getUniformv(location, bufSize, params, GL_INT); return getUniformv(location, bufSize, params, GL_INT);
} }
bool ProgramBinary::getUniformuiv(GLint location, GLsizei *bufSize, GLuint *params)
{
return getUniformv(location, bufSize, params, GL_UNSIGNED_INT);
}
void ProgramBinary::dirtyAllUniforms() void ProgramBinary::dirtyAllUniforms()
{ {
unsigned int numUniforms = mUniforms.size(); unsigned int numUniforms = mUniforms.size();
......
...@@ -101,6 +101,7 @@ class ProgramBinary : public RefCountObject ...@@ -101,6 +101,7 @@ class ProgramBinary : public RefCountObject
bool getUniformfv(GLint location, GLsizei *bufSize, GLfloat *params); bool getUniformfv(GLint location, GLsizei *bufSize, GLfloat *params);
bool getUniformiv(GLint location, GLsizei *bufSize, GLint *params); bool getUniformiv(GLint location, GLsizei *bufSize, GLint *params);
bool getUniformuiv(GLint location, GLsizei *bufSize, GLuint *params);
void dirtyAllUniforms(); void dirtyAllUniforms();
void applyUniforms(); void applyUniforms();
......
...@@ -8418,9 +8418,30 @@ void __stdcall glGetUniformuiv(GLuint program, GLint location, GLuint* params) ...@@ -8418,9 +8418,30 @@ void __stdcall glGetUniformuiv(GLuint program, GLint location, GLuint* params)
{ {
return gl::error(GL_INVALID_OPERATION); return gl::error(GL_INVALID_OPERATION);
} }
if (program == 0)
{
return gl::error(GL_INVALID_VALUE);
} }
UNIMPLEMENTED(); gl::Program *programObject = context->getProgram(program);
if (!programObject || !programObject->isLinked())
{
return gl::error(GL_INVALID_OPERATION);
}
gl::ProgramBinary *programBinary = programObject->getProgramBinary();
if (!programBinary)
{
return gl::error(GL_INVALID_OPERATION);
}
if (!programBinary->getUniformuiv(location, NULL, params))
{
return gl::error(GL_INVALID_OPERATION);
}
}
} }
catch(std::bad_alloc&) catch(std::bad_alloc&)
{ {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment