Add support for non-square matrix uniforms. Depends on implementing shader support for the same.

TRAC #22839 Signed-off-by: Geoff Lang Signed-off-by: Shanon Woods Author: Jamie Madill git-svn-id: https://angleproject.googlecode.com/svn/branches/es3proto@2138 736b8ea6-26fd-11df-bfd4-992fa37f6226
parent 36c76a91
......@@ -539,6 +539,36 @@ bool ProgramBinary::setUniformMatrix4fv(GLint location, GLsizei count, const GLf
return setUniformMatrixfv<4, 4>(location, count, value, GL_FLOAT_MAT4);
}
bool ProgramBinary::setUniformMatrix2x3fv(GLint location, GLsizei count, const GLfloat *value)
{
return setUniformMatrixfv<2, 3>(location, count, value, GL_FLOAT_MAT2x3);
}
bool ProgramBinary::setUniformMatrix3x2fv(GLint location, GLsizei count, const GLfloat *value)
{
return setUniformMatrixfv<3, 2>(location, count, value, GL_FLOAT_MAT3x2);
}
bool ProgramBinary::setUniformMatrix2x4fv(GLint location, GLsizei count, const GLfloat *value)
{
return setUniformMatrixfv<2, 4>(location, count, value, GL_FLOAT_MAT2x4);
}
bool ProgramBinary::setUniformMatrix4x2fv(GLint location, GLsizei count, const GLfloat *value)
{
return setUniformMatrixfv<4, 2>(location, count, value, GL_FLOAT_MAT4x2);
}
bool ProgramBinary::setUniformMatrix3x4fv(GLint location, GLsizei count, const GLfloat *value)
{
return setUniformMatrixfv<3, 4>(location, count, value, GL_FLOAT_MAT3x4);
}
bool ProgramBinary::setUniformMatrix4x3fv(GLint location, GLsizei count, const GLfloat *value)
{
return setUniformMatrixfv<4, 3>(location, count, value, GL_FLOAT_MAT4x3);
}
bool ProgramBinary::setUniform1iv(GLint location, GLsizei count, const GLint *v)
{
if (location < 0 || location >= (int)mUniformIndex.size())
......
......@@ -88,6 +88,12 @@ class ProgramBinary : public RefCountObject
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);
bool setUniformMatrix2x3fv(GLint location, GLsizei count, const GLfloat *value);
bool setUniformMatrix3x2fv(GLint location, GLsizei count, const GLfloat *value);
bool setUniformMatrix2x4fv(GLint location, GLsizei count, const GLfloat *value);
bool setUniformMatrix4x2fv(GLint location, GLsizei count, const GLfloat *value);
bool setUniformMatrix3x4fv(GLint location, GLsizei count, const GLfloat *value);
bool setUniformMatrix4x3fv(GLint location, GLsizei count, const GLfloat *value);
bool getUniformfv(GLint location, GLsizei *bufSize, GLfloat *params);
bool getUniformiv(GLint location, GLsizei *bufSize, GLint *params);
......
......@@ -7411,6 +7411,16 @@ void __stdcall glUniformMatrix2x3fv(GLint location, GLsizei count, GLboolean tra
try
{
if (count < 0)
{
return gl::error(GL_INVALID_VALUE);
}
if (location == -1)
{
return;
}
gl::Context *context = gl::getNonLostContext();
if (context)
......@@ -7419,9 +7429,18 @@ void __stdcall glUniformMatrix2x3fv(GLint location, GLsizei count, GLboolean tra
{
return gl::error(GL_INVALID_OPERATION);
}
gl::ProgramBinary *programBinary = context->getCurrentProgramBinary();
if (!programBinary)
{
return gl::error(GL_INVALID_OPERATION);
}
UNIMPLEMENTED();
if (!programBinary->setUniformMatrix2x3fv(location, count, value))
{
return gl::error(GL_INVALID_OPERATION);
}
}
}
catch(std::bad_alloc&)
{
......@@ -7436,6 +7455,16 @@ void __stdcall glUniformMatrix3x2fv(GLint location, GLsizei count, GLboolean tra
try
{
if (count < 0)
{
return gl::error(GL_INVALID_VALUE);
}
if (location == -1)
{
return;
}
gl::Context *context = gl::getNonLostContext();
if (context)
......@@ -7444,9 +7473,18 @@ void __stdcall glUniformMatrix3x2fv(GLint location, GLsizei count, GLboolean tra
{
return gl::error(GL_INVALID_OPERATION);
}
gl::ProgramBinary *programBinary = context->getCurrentProgramBinary();
if (!programBinary)
{
return gl::error(GL_INVALID_OPERATION);
}
UNIMPLEMENTED();
if (!programBinary->setUniformMatrix3x2fv(location, count, value))
{
return gl::error(GL_INVALID_OPERATION);
}
}
}
catch(std::bad_alloc&)
{
......@@ -7461,6 +7499,16 @@ void __stdcall glUniformMatrix2x4fv(GLint location, GLsizei count, GLboolean tra
try
{
if (count < 0)
{
return gl::error(GL_INVALID_VALUE);
}
if (location == -1)
{
return;
}
gl::Context *context = gl::getNonLostContext();
if (context)
......@@ -7469,9 +7517,18 @@ void __stdcall glUniformMatrix2x4fv(GLint location, GLsizei count, GLboolean tra
{
return gl::error(GL_INVALID_OPERATION);
}
gl::ProgramBinary *programBinary = context->getCurrentProgramBinary();
if (!programBinary)
{
return gl::error(GL_INVALID_OPERATION);
}
UNIMPLEMENTED();
if (!programBinary->setUniformMatrix2x4fv(location, count, value))
{
return gl::error(GL_INVALID_OPERATION);
}
}
}
catch(std::bad_alloc&)
{
......@@ -7486,6 +7543,16 @@ void __stdcall glUniformMatrix4x2fv(GLint location, GLsizei count, GLboolean tra
try
{
if (count < 0)
{
return gl::error(GL_INVALID_VALUE);
}
if (location == -1)
{
return;
}
gl::Context *context = gl::getNonLostContext();
if (context)
......@@ -7494,9 +7561,18 @@ void __stdcall glUniformMatrix4x2fv(GLint location, GLsizei count, GLboolean tra
{
return gl::error(GL_INVALID_OPERATION);
}
gl::ProgramBinary *programBinary = context->getCurrentProgramBinary();
if (!programBinary)
{
return gl::error(GL_INVALID_OPERATION);
}
UNIMPLEMENTED();
if (!programBinary->setUniformMatrix4x2fv(location, count, value))
{
return gl::error(GL_INVALID_OPERATION);
}
}
}
catch(std::bad_alloc&)
{
......@@ -7511,6 +7587,16 @@ void __stdcall glUniformMatrix3x4fv(GLint location, GLsizei count, GLboolean tra
try
{
if (count < 0)
{
return gl::error(GL_INVALID_VALUE);
}
if (location == -1)
{
return;
}
gl::Context *context = gl::getNonLostContext();
if (context)
......@@ -7519,9 +7605,18 @@ void __stdcall glUniformMatrix3x4fv(GLint location, GLsizei count, GLboolean tra
{
return gl::error(GL_INVALID_OPERATION);
}
gl::ProgramBinary *programBinary = context->getCurrentProgramBinary();
if (!programBinary)
{
return gl::error(GL_INVALID_OPERATION);
}
UNIMPLEMENTED();
if (!programBinary->setUniformMatrix3x4fv(location, count, value))
{
return gl::error(GL_INVALID_OPERATION);
}
}
}
catch(std::bad_alloc&)
{
......@@ -7536,6 +7631,16 @@ void __stdcall glUniformMatrix4x3fv(GLint location, GLsizei count, GLboolean tra
try
{
if (count < 0)
{
return gl::error(GL_INVALID_VALUE);
}
if (location == -1)
{
return;
}
gl::Context *context = gl::getNonLostContext();
if (context)
......@@ -7544,9 +7649,18 @@ void __stdcall glUniformMatrix4x3fv(GLint location, GLsizei count, GLboolean tra
{
return gl::error(GL_INVALID_OPERATION);
}
gl::ProgramBinary *programBinary = context->getCurrentProgramBinary();
if (!programBinary)
{
return gl::error(GL_INVALID_OPERATION);
}
UNIMPLEMENTED();
if (!programBinary->setUniformMatrix4x3fv(location, count, value))
{
return gl::error(GL_INVALID_OPERATION);
}
}
}
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