Skip to content

Commit

Permalink
#5532: Adjust unit test cases, add sinTable and cosTable to unit test…
Browse files Browse the repository at this point in the history
… resources
  • Loading branch information
codereader committed Mar 19, 2021
1 parent 56a3568 commit 6d68aa5
Show file tree
Hide file tree
Showing 4 changed files with 160 additions and 36 deletions.
4 changes: 2 additions & 2 deletions radiantcore/shaders/TextureMatrix.cpp
Expand Up @@ -97,8 +97,8 @@ void TextureMatrix::applyTransformation(const IShaderLayer::Transformation& tran

if (!sinTable || !cosTable)
{
rWarning() << "Cannot create rotate stage transform without sinTable and cosTable declarations" << std::endl;
break;
rError() << "Cannot create rotate stage transform without sinTable and cosTable declarations" << std::endl;
return;
}

// sin(expr) and cos(expr) shortcuts
Expand Down
121 changes: 89 additions & 32 deletions test/Materials.cpp
Expand Up @@ -12,6 +12,8 @@ namespace test

using MaterialsTest = RadiantTest;

constexpr double TestEpsilon = 0.0001;

TEST_F(MaterialsTest, MaterialFileInfo)
{
auto& materialManager = GlobalMaterialManager();
Expand Down Expand Up @@ -299,66 +301,121 @@ TEST_F(MaterialsTest, MaterialParserDeform)
EXPECT_FALSE(material->getDeformExpression(2));
}

TEST_F(MaterialsTest, MaterialParserStageTranslate)
TEST_F(MaterialsTest, MaterialParserStageNotransform)
{
auto material = GlobalMaterialManager().getMaterial("textures/parsertest/transform/notransform");
EXPECT_FALSE(material->getAllLayers().front()->getTranslationExpression(0));
EXPECT_FALSE(material->getAllLayers().front()->getTranslationExpression(1));
auto stage = material->getAllLayers().front();

EXPECT_EQ(stage->getTransformations().size(), 0);
EXPECT_TRUE(stage->getTextureTransform() == Matrix4::getIdentity());
}

TEST_F(MaterialsTest, MaterialParserStageTranslate)
{
auto material = GlobalMaterialManager().getMaterial("textures/parsertest/transform/translation1");
auto stage = material->getAllLayers().front();

EXPECT_EQ(stage->getTransformations().size(), 1);
EXPECT_EQ(stage->getTransformations().at(0).type, IShaderLayer::TransformType::Translate);
EXPECT_EQ(stage->getTransformations().at(0).expression1->getExpressionString(), "3.0");
EXPECT_EQ(stage->getTransformations().at(0).expression2->getExpressionString(), "parm3 + 5.0");

material = GlobalMaterialManager().getMaterial("textures/parsertest/transform/translation1");
EXPECT_EQ(material->getAllLayers().front()->getTranslationExpression(0)->getExpressionString(), "3.0");
EXPECT_EQ(material->getAllLayers().front()->getTranslationExpression(1)->getExpressionString(), "parm3 * 3.0");
stage->evaluateExpressions(1000);
EXPECT_TRUE(stage->getTextureTransform().isEqual(Matrix4::getTranslation(Vector3(3.0, 5.0, 0)), TestEpsilon));

material = GlobalMaterialManager().getMaterial("textures/parsertest/transform/translation2");
EXPECT_EQ(material->getAllLayers().front()->getTranslationExpression(0)->getExpressionString(), "time");
EXPECT_EQ(material->getAllLayers().front()->getTranslationExpression(1)->getExpressionString(), "0.5");
stage = material->getAllLayers().front();

EXPECT_EQ(stage->getTransformations().size(), 1);
EXPECT_EQ(stage->getTransformations().at(0).type, IShaderLayer::TransformType::Translate);
EXPECT_EQ(stage->getTransformations().at(0).expression1->getExpressionString(), "time");
EXPECT_EQ(stage->getTransformations().at(0).expression2->getExpressionString(), "0.5");

stage->evaluateExpressions(1000);
EXPECT_TRUE(stage->getTextureTransform().isEqual(Matrix4::getTranslation(Vector3(1.0, 0.5, 0)), TestEpsilon));
}

TEST_F(MaterialsTest, MaterialParserStageRotate)
{
auto material = GlobalMaterialManager().getMaterial("textures/parsertest/transform/notransform");
EXPECT_FALSE(material->getAllLayers().front()->getRotationExpression());
auto material = GlobalMaterialManager().getMaterial("textures/parsertest/transform/rotate1");
auto stage = material->getAllLayers().front();

EXPECT_EQ(stage->getTransformations().size(), 1);
EXPECT_EQ(stage->getTransformations().at(0).type, IShaderLayer::TransformType::Rotate);
EXPECT_EQ(stage->getTransformations().at(0).expression1->getExpressionString(), "0.03");
EXPECT_FALSE(stage->getTransformations().at(0).expression2);

material = GlobalMaterialManager().getMaterial("textures/parsertest/transform/rotate1");
EXPECT_EQ(material->getAllLayers().front()->getRotationExpression()->getExpressionString(), "0.03");
// sintable and costable lookups are [0..1], translate them to [0..2pi]
auto cosValue = cos(0.03 * 2 * c_pi);
auto sinValue = sin(0.03 * 2 * c_pi);

stage->evaluateExpressions(1000);
EXPECT_TRUE(stage->getTextureTransform().isEqual(Matrix4::byRows(
cosValue, -sinValue, 0, (-0.5*cosValue + 0.5*sinValue) + 0.5,
sinValue, cosValue, 0, (-0.5*sinValue - 0.5*cosValue) + 0.5,
0, 0, 1, 0,
0, 0, 0, 1
), TestEpsilon));
}

TEST_F(MaterialsTest, MaterialParserStageScale)
{
auto material = GlobalMaterialManager().getMaterial("textures/parsertest/transform/notransform");
EXPECT_FALSE(material->getAllLayers().front()->getScaleExpression(0));
EXPECT_FALSE(material->getAllLayers().front()->getScaleExpression(1));
auto material = GlobalMaterialManager().getMaterial("textures/parsertest/transform/scale1");
auto stage = material->getAllLayers().front();

material = GlobalMaterialManager().getMaterial("textures/parsertest/transform/scale1");
EXPECT_EQ(material->getAllLayers().front()->getScaleExpression(0)->getExpressionString(), "4.0");
EXPECT_EQ(material->getAllLayers().front()->getScaleExpression(1)->getExpressionString(), "time * 3.0");
EXPECT_EQ(stage->getTransformations().size(), 1);
EXPECT_EQ(stage->getTransformations().at(0).type, IShaderLayer::TransformType::Scale);
EXPECT_EQ(stage->getTransformations().at(0).expression1->getExpressionString(), "4.0");
EXPECT_EQ(stage->getTransformations().at(0).expression2->getExpressionString(), "time * 3.0");

stage->evaluateExpressions(1000);
EXPECT_TRUE(stage->getTextureTransform().isEqual(Matrix4::byRows(
4, 0, 0, 0,
0, 3, 0, 0,
0, 0, 1, 0,
0, 0, 0, 1
), TestEpsilon));
}

TEST_F(MaterialsTest, MaterialParserStageCenterScale)
{
auto material = GlobalMaterialManager().getMaterial("textures/parsertest/transform/notransform");
EXPECT_FALSE(material->getAllLayers().front()->getCenterScaleExpression(0));
EXPECT_FALSE(material->getAllLayers().front()->getCenterScaleExpression(1));
auto material = GlobalMaterialManager().getMaterial("textures/parsertest/transform/centerscale1");
auto stage = material->getAllLayers().front();

material = GlobalMaterialManager().getMaterial("textures/parsertest/transform/centerscale1");
EXPECT_EQ(material->getAllLayers().front()->getCenterScaleExpression(0)->getExpressionString(), "4.0");
EXPECT_EQ(material->getAllLayers().front()->getCenterScaleExpression(1)->getExpressionString(), "time * 3.0");
EXPECT_EQ(stage->getTransformations().size(), 1);
EXPECT_EQ(stage->getTransformations().at(0).type, IShaderLayer::TransformType::CenterScale);
EXPECT_EQ(stage->getTransformations().at(0).expression1->getExpressionString(), "4.0");
EXPECT_EQ(stage->getTransformations().at(0).expression2->getExpressionString(), "time * 3.0");

stage->evaluateExpressions(1000);
EXPECT_TRUE(stage->getTextureTransform().isEqual(Matrix4::byRows(
4, 0, 0, 0.5 - 0.5 * 4,
0, 3, 0, 0.5 - 0.5 * 3,
0, 0, 1, 0,
0, 0, 0, 1
), TestEpsilon));
}

TEST_F(MaterialsTest, MaterialParserStageShear)
{
auto material = GlobalMaterialManager().getMaterial("textures/parsertest/transform/notransform");
EXPECT_FALSE(material->getAllLayers().front()->getShearExpression(0));
EXPECT_FALSE(material->getAllLayers().front()->getShearExpression(1));
auto material = GlobalMaterialManager().getMaterial("textures/parsertest/transform/shear1");
auto stage = material->getAllLayers().front();
EXPECT_EQ(stage->getTransformations().size(), 1);
EXPECT_EQ(stage->getTransformations().at(0).type, IShaderLayer::TransformType::Shear);
EXPECT_EQ(stage->getTransformations().at(0).expression1->getExpressionString(), "global3 + 5.0");
EXPECT_EQ(stage->getTransformations().at(0).expression2->getExpressionString(), "4.0");

material = GlobalMaterialManager().getMaterial("textures/parsertest/transform/shear1");
EXPECT_EQ(material->getAllLayers().front()->getShearExpression(0)->getExpressionString(), "global3");
EXPECT_EQ(material->getAllLayers().front()->getShearExpression(1)->getExpressionString(), "4.0");
stage->evaluateExpressions(1000);
EXPECT_TRUE(stage->getTextureTransform().isEqual(Matrix4::byRows(
1, 5, 0, -0.5 * 5,
4, 1, 0, -0.5 * 4,
0, 0, 1, 0,
0, 0, 0, 1
), TestEpsilon));
}

TEST_F(MaterialsTest, MaterialParserStageTransforms)
{
constexpr double TestEpsilon = 0.0001;
auto material = GlobalMaterialManager().getMaterial("textures/parsertest/transform/combined1");

auto stage = material->getAllLayers().front();
Expand Down Expand Up @@ -432,7 +489,7 @@ TEST_F(MaterialsTest, MaterialParserStageTransforms)
auto cosValue = cos(0.22 * 2 * c_pi);
auto sinValue = sin(0.22 * 2 * c_pi);

auto rotate = Matrix4::byColumns(cosValue, -sinValue, 0, (-0.5*cosValue+0.5*sinValue) + 0.5,
auto rotate = Matrix4::byRows(cosValue, -sinValue, 0, (-0.5*cosValue+0.5*sinValue) + 0.5,
sinValue, cosValue, 0, (-0.5*sinValue-0.5*cosValue) + 0.5,
0, 0, 1, 0,
0, 0, 0, 1);
Expand Down
4 changes: 2 additions & 2 deletions test/resources/tdm/materials/parsertest.mtr
Expand Up @@ -138,7 +138,7 @@ textures/parsertest/transform/translation1
{
{
map _white
translate 3, parm3*3
translate 3, parm3+5
}
}

Expand Down Expand Up @@ -170,7 +170,7 @@ textures/parsertest/transform/shear1
{
{
map _white
shear global3, 4
shear global3 + 5, 4
}
}

Expand Down
67 changes: 67 additions & 0 deletions test/resources/tdm/materials/tables.mtr
@@ -0,0 +1,67 @@
table sinTable { {
0.000000, 0.024541, 0.049068, 0.073565, 0.098017, 0.122411, 0.146730, 0.170962,
0.195090, 0.219101, 0.242980, 0.266713, 0.290285, 0.313682, 0.336890, 0.359895,
0.382683, 0.405241, 0.427555, 0.449611, 0.471397, 0.492898, 0.514103, 0.534998,
0.555570, 0.575808, 0.595699, 0.615232, 0.634393, 0.653173, 0.671559, 0.689541,
0.707107, 0.724247, 0.740951, 0.757209, 0.773010, 0.788346, 0.803208, 0.817585,
0.831470, 0.844854, 0.857729, 0.870087, 0.881921, 0.893224, 0.903989, 0.914210,
0.923880, 0.932993, 0.941544, 0.949528, 0.956940, 0.963776, 0.970031, 0.975702,
0.980785, 0.985278, 0.989177, 0.992480, 0.995185, 0.997290, 0.998795, 0.999699,
1.000000, 0.999699, 0.998795, 0.997290, 0.995185, 0.992480, 0.989177, 0.985278,
0.980785, 0.975702, 0.970031, 0.963776, 0.956940, 0.949528, 0.941544, 0.932993,
0.923880, 0.914210, 0.903989, 0.893224, 0.881921, 0.870087, 0.857729, 0.844854,
0.831470, 0.817585, 0.803208, 0.788346, 0.773010, 0.757209, 0.740951, 0.724247,
0.707107, 0.689541, 0.671559, 0.653173, 0.634393, 0.615232, 0.595699, 0.575808,
0.555570, 0.534998, 0.514103, 0.492898, 0.471397, 0.449611, 0.427555, 0.405241,
0.382683, 0.359895, 0.336890, 0.313682, 0.290285, 0.266713, 0.242980, 0.219101,
0.195090, 0.170962, 0.146730, 0.122411, 0.098017, 0.073565, 0.049068, 0.024541,
0.000000, -0.024541, -0.049068, -0.073565, -0.098017, -0.122411, -0.146730, -0.170962,
-0.195090, -0.219101, -0.242980, -0.266713, -0.290285, -0.313682, -0.336890, -0.359895,
-0.382683, -0.405241, -0.427555, -0.449611, -0.471397, -0.492898, -0.514103, -0.534998,
-0.555570, -0.575808, -0.595699, -0.615232, -0.634393, -0.653173, -0.671559, -0.689541,
-0.707107, -0.724247, -0.740951, -0.757209, -0.773010, -0.788346, -0.803208, -0.817585,
-0.831470, -0.844854, -0.857729, -0.870087, -0.881921, -0.893224, -0.903989, -0.914210,
-0.923880, -0.932993, -0.941544, -0.949528, -0.956940, -0.963776, -0.970031, -0.975702,
-0.980785, -0.985278, -0.989177, -0.992480, -0.995185, -0.997290, -0.998795, -0.999699,
-1.000000, -0.999699, -0.998795, -0.997290, -0.995185, -0.992480, -0.989177, -0.985278,
-0.980785, -0.975702, -0.970031, -0.963776, -0.956940, -0.949528, -0.941544, -0.932993,
-0.923880, -0.914210, -0.903989, -0.893224, -0.881921, -0.870087, -0.857729, -0.844854,
-0.831470, -0.817585, -0.803208, -0.788346, -0.773010, -0.757209, -0.740951, -0.724247,
-0.707107, -0.689541, -0.671559, -0.653173, -0.634393, -0.615232, -0.595699, -0.575808,
-0.555570, -0.534998, -0.514103, -0.492898, -0.471397, -0.449611, -0.427555, -0.405241,
-0.382683, -0.359895, -0.336890, -0.313682, -0.290285, -0.266713, -0.242980, -0.219101,
-0.195090, -0.170962, -0.146730, -0.122411, -0.098017, -0.073565, -0.049068, -0.024541 } }

table cosTable { {
1.000000, 0.999699, 0.998795, 0.997290, 0.995185, 0.992480, 0.989177, 0.985278,
0.980785, 0.975702, 0.970031, 0.963776, 0.956940, 0.949528, 0.941544, 0.932993,
0.923880, 0.914210, 0.903989, 0.893224, 0.881921, 0.870087, 0.857729, 0.844854,
0.831470, 0.817585, 0.803208, 0.788346, 0.773010, 0.757209, 0.740951, 0.724247,
0.707107, 0.689541, 0.671559, 0.653173, 0.634393, 0.615232, 0.595699, 0.575808,
0.555570, 0.534998, 0.514103, 0.492898, 0.471397, 0.449611, 0.427555, 0.405241,
0.382683, 0.359895, 0.336890, 0.313682, 0.290285, 0.266713, 0.242980, 0.219101,
0.195090, 0.170962, 0.146730, 0.122411, 0.098017, 0.073565, 0.049068, 0.024541,
0.000000, -0.024541, -0.049068, -0.073565, -0.098017, -0.122411, -0.146730, -0.170962,
-0.195090, -0.219101, -0.242980, -0.266713, -0.290285, -0.313682, -0.336890, -0.359895,
-0.382683, -0.405241, -0.427555, -0.449611, -0.471397, -0.492898, -0.514103, -0.534998,
-0.555570, -0.575808, -0.595699, -0.615232, -0.634393, -0.653173, -0.671559, -0.689541,
-0.707107, -0.724247, -0.740951, -0.757209, -0.773010, -0.788346, -0.803208, -0.817585,
-0.831470, -0.844854, -0.857729, -0.870087, -0.881921, -0.893224, -0.903989, -0.914210,
-0.923880, -0.932993, -0.941544, -0.949528, -0.956940, -0.963776, -0.970031, -0.975702,
-0.980785, -0.985278, -0.989177, -0.992480, -0.995185, -0.997290, -0.998795, -0.999699,
-1.000000, -0.999699, -0.998795, -0.997290, -0.995185, -0.992480, -0.989177, -0.985278,
-0.980785, -0.975702, -0.970031, -0.963776, -0.956940, -0.949528, -0.941544, -0.932993,
-0.923880, -0.914210, -0.903989, -0.893224, -0.881921, -0.870087, -0.857729, -0.844854,
-0.831470, -0.817585, -0.803208, -0.788346, -0.773010, -0.757209, -0.740951, -0.724247,
-0.707107, -0.689541, -0.671559, -0.653173, -0.634393, -0.615232, -0.595699, -0.575808,
-0.555570, -0.534998, -0.514103, -0.492898, -0.471397, -0.449611, -0.427555, -0.405241,
-0.382683, -0.359895, -0.336890, -0.313682, -0.290285, -0.266713, -0.242980, -0.219101,
-0.195090, -0.170962, -0.146730, -0.122411, -0.098017, -0.073565, -0.049068, -0.024541,
0.000000, 0.024541, 0.049068, 0.073565, 0.098017, 0.122411, 0.146730, 0.170962,
0.195090, 0.219101, 0.242980, 0.266713, 0.290285, 0.313682, 0.336890, 0.359895,
0.382683, 0.405241, 0.427555, 0.449611, 0.471397, 0.492898, 0.514103, 0.534998,
0.555570, 0.575808, 0.595699, 0.615232, 0.634393, 0.653173, 0.671559, 0.689541,
0.707107, 0.724247, 0.740951, 0.757209, 0.773010, 0.788346, 0.803208, 0.817585,
0.831470, 0.844854, 0.857729, 0.870087, 0.881921, 0.893224, 0.903989, 0.914210,
0.923880, 0.932993, 0.941544, 0.949528, 0.956940, 0.963776, 0.970031, 0.975702,
0.980785, 0.985278, 0.989177, 0.992480, 0.995185, 0.997290, 0.998795, 0.999699 } }

0 comments on commit 6d68aa5

Please sign in to comment.