[drape, test] Added UniformValidator to tests.

This commit is contained in:
Dmitry Kunin 2014-01-09 16:10:12 +03:00 committed by Alex Zolotarev
parent b8a0e45116
commit bff7af8137

View file

@ -44,6 +44,31 @@ namespace
const T * m_memory;
uint32_t m_size;
};
void mock_glGetActiveUniform(uint32_t programID, uint32_t index,
int32_t * size, glConst * type, string & name)
{
*size = 1;
if (index < 9)
{
static pair<string, glConst> mockUniforms[9] =
{
make_pair("position0", GLConst::GLIntType),
make_pair("position1", GLConst::GLIntVec2),
make_pair("position2", GLConst::GLIntVec3),
make_pair("position3", GLConst::GLIntVec4),
make_pair("position4", GLConst::GLFloatType),
make_pair("position5", GLConst::GLFloatVec2),
make_pair("position6", GLConst::GLFloatVec3),
make_pair("position7", GLConst::GLFloatVec4),
make_pair("viewModel", GLConst::GLFloatMat4)
};
name = mockUniforms[index].first;
*type = mockUniforms[index].second;
}
else
ASSERT(false, ("Undefined index:", index));
}
}
UNIT_TEST(UniformValueTest)
@ -51,10 +76,12 @@ UNIT_TEST(UniformValueTest)
const uint32_t VertexShaderID = 1;
const uint32_t FragmentShaderID = 2;
const uint32_t ProgramID = 3;
const uint32_t UniformsCount = 9;
const int32_t positionLoc = 10;
const int32_t modelViewLoc = 11;
float matrix[16] =
{
1.0f, 0.0f, 0.0f, 0.0f,
@ -85,30 +112,35 @@ UNIT_TEST(UniformValueTest)
EXPECTGL(glDetachShader(ProgramID, VertexShaderID));
EXPECTGL(glDetachShader(ProgramID, FragmentShaderID));
#ifdef DEBUG
EXPECTGL(glGetProgramiv(ProgramID, GLConst::GLActiveUniforms)).WillOnce(Return(UniformsCount));
EXPECTGL(glGetActiveUniform(ProgramID, _, _, _, _)).Times(UniformsCount).WillRepeatedly(Invoke(mock_glGetActiveUniform));
#endif
EXPECTGL(glUseProgram(ProgramID));
EXPECTGL(glGetUniformLocation(ProgramID, "position")).WillOnce(Return(positionLoc));
EXPECTGL(glGetUniformLocation(ProgramID, "position0")).WillOnce(Return(positionLoc));
EXPECTGL(glUniformValuei(positionLoc, 1));
EXPECTGL(glGetUniformLocation(ProgramID, "position")).WillOnce(Return(positionLoc));
EXPECTGL(glGetUniformLocation(ProgramID, "position1")).WillOnce(Return(positionLoc));
EXPECTGL(glUniformValuei(positionLoc, 1, 2));
EXPECTGL(glGetUniformLocation(ProgramID, "position")).WillOnce(Return(positionLoc));
EXPECTGL(glGetUniformLocation(ProgramID, "position2")).WillOnce(Return(positionLoc));
EXPECTGL(glUniformValuei(positionLoc, 1, 2, 3));
EXPECTGL(glGetUniformLocation(ProgramID, "position")).WillOnce(Return(positionLoc));
EXPECTGL(glGetUniformLocation(ProgramID, "position3")).WillOnce(Return(positionLoc));
EXPECTGL(glUniformValuei(positionLoc, 1, 2, 3, 4));
EXPECTGL(glGetUniformLocation(ProgramID, "position")).WillOnce(Return(positionLoc));
EXPECTGL(glGetUniformLocation(ProgramID, "position4")).WillOnce(Return(positionLoc));
EXPECTGL(glUniformValuef(positionLoc, 1.0f));
EXPECTGL(glGetUniformLocation(ProgramID, "position")).WillOnce(Return(positionLoc));
EXPECTGL(glGetUniformLocation(ProgramID, "position5")).WillOnce(Return(positionLoc));
EXPECTGL(glUniformValuef(positionLoc, 1.0f, 2.0f));
EXPECTGL(glGetUniformLocation(ProgramID, "position")).WillOnce(Return(positionLoc));
EXPECTGL(glGetUniformLocation(ProgramID, "position6")).WillOnce(Return(positionLoc));
EXPECTGL(glUniformValuef(positionLoc, 1.0f, 2.0f, 3.0f));
EXPECTGL(glGetUniformLocation(ProgramID, "position")).WillOnce(Return(positionLoc));
EXPECTGL(glGetUniformLocation(ProgramID, "position7")).WillOnce(Return(positionLoc));
EXPECTGL(glUniformValuef(positionLoc, 1.0f, 2.0f, 3.0f, 4.0f));
EXPECTGL(glGetUniformLocation(ProgramID, "viewModel")).WillOnce(Return(modelViewLoc));
@ -128,42 +160,42 @@ UNIT_TEST(UniformValueTest)
program->Bind();
{
UniformValue v("position", 1);
UniformValue v("position0", 1);
v.Apply(program);
}
{
UniformValue v("position", 1, 2);
UniformValue v("position1", 1, 2);
v.Apply(program);
}
{
UniformValue v("position", 1, 2, 3);
UniformValue v("position2", 1, 2, 3);
v.Apply(program);
}
{
UniformValue v("position", 1, 2, 3, 4);
UniformValue v("position3", 1, 2, 3, 4);
v.Apply(program);
}
{
UniformValue v("position", 1.0f);
UniformValue v("position4", 1.0f);
v.Apply(program);
}
{
UniformValue v("position", 1.0f, 2.0f);
UniformValue v("position5", 1.0f, 2.0f);
v.Apply(program);
}
{
UniformValue v("position", 1.0f, 2.0f, 3.0f);
UniformValue v("position6", 1.0f, 2.0f, 3.0f);
v.Apply(program);
}
{
UniformValue v("position", 1.0f, 2.0f, 3.0f, 4.0f);
UniformValue v("position7", 1.0f, 2.0f, 3.0f, 4.0f);
v.Apply(program);
}