Implements Uniform*i{v}

TRAC #11649 Signed-off-by: Andrew Lewycky Signed-off-by: Daniel Koch Author: Shannon Woods git-svn-id: https://angleproject.googlecode.com/svn/trunk@122 736b8ea6-26fd-11df-bfd4-992fa37f6226
parent f4a0c8e8
...@@ -65,6 +65,9 @@ class Program ...@@ -65,6 +65,9 @@ class Program
bool setUniformMatrix3fv(GLint location, GLsizei count, const GLfloat *value); bool setUniformMatrix3fv(GLint location, GLsizei count, const GLfloat *value);
bool setUniformMatrix4fv(GLint location, GLsizei count, const GLfloat *value); bool setUniformMatrix4fv(GLint location, GLsizei count, const GLfloat *value);
bool setUniform1iv(GLint location, GLsizei count, const GLint *v); bool setUniform1iv(GLint location, GLsizei count, const GLint *v);
bool setUniform2iv(GLint location, GLsizei count, const GLint *v);
bool setUniform3iv(GLint location, GLsizei count, const GLint *v);
bool setUniform4iv(GLint location, GLsizei count, const GLint *v);
void applyUniforms(); void applyUniforms();
...@@ -118,6 +121,9 @@ class Program ...@@ -118,6 +121,9 @@ class Program
bool applyUniformMatrix3fv(GLint location, GLsizei count, const GLfloat *value); bool applyUniformMatrix3fv(GLint location, GLsizei count, const GLfloat *value);
bool applyUniformMatrix4fv(GLint location, GLsizei count, const GLfloat *value); bool applyUniformMatrix4fv(GLint location, GLsizei count, const GLfloat *value);
bool applyUniform1iv(GLint location, GLsizei count, const GLint *v); bool applyUniform1iv(GLint location, GLsizei count, const GLint *v);
bool applyUniform2iv(GLint location, GLsizei count, const GLint *v);
bool applyUniform3iv(GLint location, GLsizei count, const GLint *v);
bool applyUniform4iv(GLint location, GLsizei count, const GLint *v);
void appendToInfoLog(const char *info); void appendToInfoLog(const char *info);
......
...@@ -3472,14 +3472,14 @@ void __stdcall glUniform1fv(GLint location, GLsizei count, const GLfloat* v) ...@@ -3472,14 +3472,14 @@ void __stdcall glUniform1fv(GLint location, GLsizei count, const GLfloat* v)
try try
{ {
if (location == -1) if (count < 0)
{ {
return; return error(GL_INVALID_VALUE);
} }
if (count < 0) if (location == -1)
{ {
return error(GL_INVALID_VALUE); return;
} }
gl::Context *context = gl::getContext(); gl::Context *context = gl::getContext();
...@@ -3521,6 +3521,11 @@ void __stdcall glUniform1iv(GLint location, GLsizei count, const GLint* v) ...@@ -3521,6 +3521,11 @@ void __stdcall glUniform1iv(GLint location, GLsizei count, const GLint* v)
return error(GL_INVALID_VALUE); return error(GL_INVALID_VALUE);
} }
if (location == -1)
{
return;
}
gl::Context *context = gl::getContext(); gl::Context *context = gl::getContext();
if (context) if (context)
...@@ -3557,14 +3562,14 @@ void __stdcall glUniform2fv(GLint location, GLsizei count, const GLfloat* v) ...@@ -3557,14 +3562,14 @@ void __stdcall glUniform2fv(GLint location, GLsizei count, const GLfloat* v)
try try
{ {
if (location == -1) if (count < 0)
{ {
return; return error(GL_INVALID_VALUE);
} }
if (count < 0) if (location == -1)
{ {
return error(GL_INVALID_VALUE); return;
} }
gl::Context *context = gl::getContext(); gl::Context *context = gl::getContext();
...@@ -3608,7 +3613,27 @@ void __stdcall glUniform2iv(GLint location, GLsizei count, const GLint* v) ...@@ -3608,7 +3613,27 @@ void __stdcall glUniform2iv(GLint location, GLsizei count, const GLint* v)
return error(GL_INVALID_VALUE); return error(GL_INVALID_VALUE);
} }
UNIMPLEMENTED(); // FIXME if (location == -1)
{
return;
}
gl::Context *context = gl::getContext();
if (context)
{
gl::Program *program = context->getCurrentProgram();
if (!program)
{
return error(GL_INVALID_OPERATION);
}
if (!program->setUniform2iv(location, count, v))
{
return error(GL_INVALID_OPERATION);
}
}
} }
catch(std::bad_alloc&) catch(std::bad_alloc&)
{ {
...@@ -3680,7 +3705,27 @@ void __stdcall glUniform3iv(GLint location, GLsizei count, const GLint* v) ...@@ -3680,7 +3705,27 @@ void __stdcall glUniform3iv(GLint location, GLsizei count, const GLint* v)
return error(GL_INVALID_VALUE); return error(GL_INVALID_VALUE);
} }
UNIMPLEMENTED(); // FIXME if (location == -1)
{
return;
}
gl::Context *context = gl::getContext();
if (context)
{
gl::Program *program = context->getCurrentProgram();
if (!program)
{
return error(GL_INVALID_OPERATION);
}
if (!program->setUniform3iv(location, count, v))
{
return error(GL_INVALID_OPERATION);
}
}
} }
catch(std::bad_alloc&) catch(std::bad_alloc&)
{ {
...@@ -3752,7 +3797,27 @@ void __stdcall glUniform4iv(GLint location, GLsizei count, const GLint* v) ...@@ -3752,7 +3797,27 @@ void __stdcall glUniform4iv(GLint location, GLsizei count, const GLint* v)
return error(GL_INVALID_VALUE); return error(GL_INVALID_VALUE);
} }
UNIMPLEMENTED(); // FIXME if (location == -1)
{
return;
}
gl::Context *context = gl::getContext();
if (context)
{
gl::Program *program = context->getCurrentProgram();
if (!program)
{
return error(GL_INVALID_OPERATION);
}
if (!program->setUniform4iv(location, count, v))
{
return 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