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 ...@@ -539,6 +539,36 @@ bool ProgramBinary::setUniformMatrix4fv(GLint location, GLsizei count, const GLf
return setUniformMatrixfv<4, 4>(location, count, value, GL_FLOAT_MAT4); 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) bool ProgramBinary::setUniform1iv(GLint location, GLsizei count, const GLint *v)
{ {
if (location < 0 || location >= (int)mUniformIndex.size()) if (location < 0 || location >= (int)mUniformIndex.size())
......
...@@ -88,6 +88,12 @@ class ProgramBinary : public RefCountObject ...@@ -88,6 +88,12 @@ class ProgramBinary : public RefCountObject
bool setUniform2iv(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 setUniform3iv(GLint location, GLsizei count, const GLint *v);
bool setUniform4iv(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 getUniformfv(GLint location, GLsizei *bufSize, GLfloat *params);
bool getUniformiv(GLint location, GLsizei *bufSize, GLint *params); bool getUniformiv(GLint location, GLsizei *bufSize, GLint *params);
......
...@@ -7411,6 +7411,16 @@ void __stdcall glUniformMatrix2x3fv(GLint location, GLsizei count, GLboolean tra ...@@ -7411,6 +7411,16 @@ void __stdcall glUniformMatrix2x3fv(GLint location, GLsizei count, GLboolean tra
try try
{ {
if (count < 0)
{
return gl::error(GL_INVALID_VALUE);
}
if (location == -1)
{
return;
}
gl::Context *context = gl::getNonLostContext(); gl::Context *context = gl::getNonLostContext();
if (context) if (context)
...@@ -7419,9 +7429,18 @@ void __stdcall glUniformMatrix2x3fv(GLint location, GLsizei count, GLboolean tra ...@@ -7419,9 +7429,18 @@ void __stdcall glUniformMatrix2x3fv(GLint location, GLsizei count, GLboolean tra
{ {
return gl::error(GL_INVALID_OPERATION); return gl::error(GL_INVALID_OPERATION);
} }
}
UNIMPLEMENTED(); gl::ProgramBinary *programBinary = context->getCurrentProgramBinary();
if (!programBinary)
{
return gl::error(GL_INVALID_OPERATION);
}
if (!programBinary->setUniformMatrix2x3fv(location, count, value))
{
return gl::error(GL_INVALID_OPERATION);
}
}
} }
catch(std::bad_alloc&) catch(std::bad_alloc&)
{ {
...@@ -7436,6 +7455,16 @@ void __stdcall glUniformMatrix3x2fv(GLint location, GLsizei count, GLboolean tra ...@@ -7436,6 +7455,16 @@ void __stdcall glUniformMatrix3x2fv(GLint location, GLsizei count, GLboolean tra
try try
{ {
if (count < 0)
{
return gl::error(GL_INVALID_VALUE);
}
if (location == -1)
{
return;
}
gl::Context *context = gl::getNonLostContext(); gl::Context *context = gl::getNonLostContext();
if (context) if (context)
...@@ -7444,9 +7473,18 @@ void __stdcall glUniformMatrix3x2fv(GLint location, GLsizei count, GLboolean tra ...@@ -7444,9 +7473,18 @@ void __stdcall glUniformMatrix3x2fv(GLint location, GLsizei count, GLboolean tra
{ {
return gl::error(GL_INVALID_OPERATION); return gl::error(GL_INVALID_OPERATION);
} }
}
UNIMPLEMENTED(); gl::ProgramBinary *programBinary = context->getCurrentProgramBinary();
if (!programBinary)
{
return gl::error(GL_INVALID_OPERATION);
}
if (!programBinary->setUniformMatrix3x2fv(location, count, value))
{
return gl::error(GL_INVALID_OPERATION);
}
}
} }
catch(std::bad_alloc&) catch(std::bad_alloc&)
{ {
...@@ -7461,6 +7499,16 @@ void __stdcall glUniformMatrix2x4fv(GLint location, GLsizei count, GLboolean tra ...@@ -7461,6 +7499,16 @@ void __stdcall glUniformMatrix2x4fv(GLint location, GLsizei count, GLboolean tra
try try
{ {
if (count < 0)
{
return gl::error(GL_INVALID_VALUE);
}
if (location == -1)
{
return;
}
gl::Context *context = gl::getNonLostContext(); gl::Context *context = gl::getNonLostContext();
if (context) if (context)
...@@ -7469,9 +7517,18 @@ void __stdcall glUniformMatrix2x4fv(GLint location, GLsizei count, GLboolean tra ...@@ -7469,9 +7517,18 @@ void __stdcall glUniformMatrix2x4fv(GLint location, GLsizei count, GLboolean tra
{ {
return gl::error(GL_INVALID_OPERATION); return gl::error(GL_INVALID_OPERATION);
} }
}
UNIMPLEMENTED(); gl::ProgramBinary *programBinary = context->getCurrentProgramBinary();
if (!programBinary)
{
return gl::error(GL_INVALID_OPERATION);
}
if (!programBinary->setUniformMatrix2x4fv(location, count, value))
{
return gl::error(GL_INVALID_OPERATION);
}
}
} }
catch(std::bad_alloc&) catch(std::bad_alloc&)
{ {
...@@ -7486,6 +7543,16 @@ void __stdcall glUniformMatrix4x2fv(GLint location, GLsizei count, GLboolean tra ...@@ -7486,6 +7543,16 @@ void __stdcall glUniformMatrix4x2fv(GLint location, GLsizei count, GLboolean tra
try try
{ {
if (count < 0)
{
return gl::error(GL_INVALID_VALUE);
}
if (location == -1)
{
return;
}
gl::Context *context = gl::getNonLostContext(); gl::Context *context = gl::getNonLostContext();
if (context) if (context)
...@@ -7494,9 +7561,18 @@ void __stdcall glUniformMatrix4x2fv(GLint location, GLsizei count, GLboolean tra ...@@ -7494,9 +7561,18 @@ void __stdcall glUniformMatrix4x2fv(GLint location, GLsizei count, GLboolean tra
{ {
return gl::error(GL_INVALID_OPERATION); return gl::error(GL_INVALID_OPERATION);
} }
}
UNIMPLEMENTED(); gl::ProgramBinary *programBinary = context->getCurrentProgramBinary();
if (!programBinary)
{
return gl::error(GL_INVALID_OPERATION);
}
if (!programBinary->setUniformMatrix4x2fv(location, count, value))
{
return gl::error(GL_INVALID_OPERATION);
}
}
} }
catch(std::bad_alloc&) catch(std::bad_alloc&)
{ {
...@@ -7511,6 +7587,16 @@ void __stdcall glUniformMatrix3x4fv(GLint location, GLsizei count, GLboolean tra ...@@ -7511,6 +7587,16 @@ void __stdcall glUniformMatrix3x4fv(GLint location, GLsizei count, GLboolean tra
try try
{ {
if (count < 0)
{
return gl::error(GL_INVALID_VALUE);
}
if (location == -1)
{
return;
}
gl::Context *context = gl::getNonLostContext(); gl::Context *context = gl::getNonLostContext();
if (context) if (context)
...@@ -7519,9 +7605,18 @@ void __stdcall glUniformMatrix3x4fv(GLint location, GLsizei count, GLboolean tra ...@@ -7519,9 +7605,18 @@ void __stdcall glUniformMatrix3x4fv(GLint location, GLsizei count, GLboolean tra
{ {
return gl::error(GL_INVALID_OPERATION); return gl::error(GL_INVALID_OPERATION);
} }
}
UNIMPLEMENTED(); gl::ProgramBinary *programBinary = context->getCurrentProgramBinary();
if (!programBinary)
{
return gl::error(GL_INVALID_OPERATION);
}
if (!programBinary->setUniformMatrix3x4fv(location, count, value))
{
return gl::error(GL_INVALID_OPERATION);
}
}
} }
catch(std::bad_alloc&) catch(std::bad_alloc&)
{ {
...@@ -7536,6 +7631,16 @@ void __stdcall glUniformMatrix4x3fv(GLint location, GLsizei count, GLboolean tra ...@@ -7536,6 +7631,16 @@ void __stdcall glUniformMatrix4x3fv(GLint location, GLsizei count, GLboolean tra
try try
{ {
if (count < 0)
{
return gl::error(GL_INVALID_VALUE);
}
if (location == -1)
{
return;
}
gl::Context *context = gl::getNonLostContext(); gl::Context *context = gl::getNonLostContext();
if (context) if (context)
...@@ -7544,9 +7649,18 @@ void __stdcall glUniformMatrix4x3fv(GLint location, GLsizei count, GLboolean tra ...@@ -7544,9 +7649,18 @@ void __stdcall glUniformMatrix4x3fv(GLint location, GLsizei count, GLboolean tra
{ {
return gl::error(GL_INVALID_OPERATION); return gl::error(GL_INVALID_OPERATION);
} }
}
UNIMPLEMENTED(); gl::ProgramBinary *programBinary = context->getCurrentProgramBinary();
if (!programBinary)
{
return gl::error(GL_INVALID_OPERATION);
}
if (!programBinary->setUniformMatrix4x3fv(location, count, value))
{
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