Skip to content

Commit

Permalink
#5532: Unit tests covering a few cases
Browse files Browse the repository at this point in the history
  • Loading branch information
codereader committed Mar 14, 2021
1 parent 921a557 commit 99fc006
Show file tree
Hide file tree
Showing 3 changed files with 215 additions and 3 deletions.
4 changes: 2 additions & 2 deletions radiantcore/shaders/Doom3ShaderLayer.cpp
Expand Up @@ -329,8 +329,8 @@ void Doom3ShaderLayer::setColourExpression(ColourComponentSelector comp, const I
_expressionSlots[Expression::ColourGreen].expression = _expressionSlots[Expression::ColourRed].expression;
_expressionSlots[Expression::ColourBlue].registerIndex = _expressionSlots[Expression::ColourRed].registerIndex;
_expressionSlots[Expression::ColourBlue].expression = _expressionSlots[Expression::ColourRed].expression;
_expressionSlots[Expression::ColourAlpha].registerIndex = _expressionSlots[Expression::ColourAlpha].registerIndex;
_expressionSlots[Expression::ColourAlpha].expression = _expressionSlots[Expression::ColourAlpha].expression;
_expressionSlots[Expression::ColourAlpha].registerIndex = _expressionSlots[Expression::ColourRed].registerIndex;
_expressionSlots[Expression::ColourAlpha].expression = _expressionSlots[Expression::ColourRed].expression;
break;
};
}
Expand Down
115 changes: 115 additions & 0 deletions test/Materials.cpp
Expand Up @@ -522,4 +522,119 @@ TEST_F(MaterialsTest, MaterialParserGuiSurf)
EXPECT_EQ(material->getGuiSurfArgument(), "");
}

TEST_F(MaterialsTest, MaterialParserRgbaExpressions)
{
auto material = GlobalMaterialManager().getMaterial("textures/parsertest/colourexpr1");

auto diffuse = material->getAllLayers().front();
auto time = 10;
auto timeSecs = time / 1000.0f; // 0.01
diffuse->evaluateExpressions(time);

EXPECT_TRUE(diffuse->getColour() == Colour4(timeSecs*3, 1, 1, 1));
EXPECT_EQ(diffuse->getColourExpression(IShaderLayer::COMP_RED)->getExpressionString(), "time * 3.0");
EXPECT_FALSE(diffuse->getColourExpression(IShaderLayer::COMP_GREEN));
EXPECT_FALSE(diffuse->getColourExpression(IShaderLayer::COMP_BLUE));
EXPECT_FALSE(diffuse->getColourExpression(IShaderLayer::COMP_ALPHA));

material = GlobalMaterialManager().getMaterial("textures/parsertest/colourexpr2");

diffuse = material->getAllLayers().front();
diffuse->evaluateExpressions(time);

EXPECT_TRUE(diffuse->getColour() == Colour4(1, timeSecs*3, 1, 1));
EXPECT_FALSE(diffuse->getColourExpression(IShaderLayer::COMP_RED));
EXPECT_EQ(diffuse->getColourExpression(IShaderLayer::COMP_GREEN)->getExpressionString(), "time * 3.0");
EXPECT_FALSE(diffuse->getColourExpression(IShaderLayer::COMP_BLUE));
EXPECT_FALSE(diffuse->getColourExpression(IShaderLayer::COMP_ALPHA));

material = GlobalMaterialManager().getMaterial("textures/parsertest/colourexpr3");

diffuse = material->getAllLayers().front();
diffuse->evaluateExpressions(time);

EXPECT_TRUE(diffuse->getColour() == Colour4(1, 1, timeSecs * 3, 1));
EXPECT_FALSE(diffuse->getColourExpression(IShaderLayer::COMP_RED));
EXPECT_FALSE(diffuse->getColourExpression(IShaderLayer::COMP_GREEN));
EXPECT_EQ(diffuse->getColourExpression(IShaderLayer::COMP_BLUE)->getExpressionString(), "time * 3.0");
EXPECT_FALSE(diffuse->getColourExpression(IShaderLayer::COMP_ALPHA));

material = GlobalMaterialManager().getMaterial("textures/parsertest/colourexpr4");

diffuse = material->getAllLayers().front();
diffuse->evaluateExpressions(time);

EXPECT_TRUE(diffuse->getColour() == Colour4(1, 1, 1, timeSecs * 3));
EXPECT_FALSE(diffuse->getColourExpression(IShaderLayer::COMP_RED));
EXPECT_FALSE(diffuse->getColourExpression(IShaderLayer::COMP_GREEN));
EXPECT_FALSE(diffuse->getColourExpression(IShaderLayer::COMP_BLUE));
EXPECT_EQ(diffuse->getColourExpression(IShaderLayer::COMP_ALPHA)->getExpressionString(), "time * 3.0");

material = GlobalMaterialManager().getMaterial("textures/parsertest/colourexpr5");

diffuse = material->getAllLayers().front();
diffuse->evaluateExpressions(time);

EXPECT_TRUE(diffuse->getColour() == Colour4(timeSecs * 3, timeSecs * 3, timeSecs * 3, 1));
EXPECT_EQ(diffuse->getColourExpression(IShaderLayer::COMP_RED)->getExpressionString(), "time * 3.0");
EXPECT_EQ(diffuse->getColourExpression(IShaderLayer::COMP_GREEN)->getExpressionString(), "time * 3.0");
EXPECT_EQ(diffuse->getColourExpression(IShaderLayer::COMP_BLUE)->getExpressionString(), "time * 3.0");
EXPECT_FALSE(diffuse->getColourExpression(IShaderLayer::COMP_ALPHA));

material = GlobalMaterialManager().getMaterial("textures/parsertest/colourexpr6");

diffuse = material->getAllLayers().front();
diffuse->evaluateExpressions(time);

EXPECT_TRUE(diffuse->getColour() == Colour4(timeSecs * 3, timeSecs * 3, timeSecs * 3, timeSecs * 3));
EXPECT_EQ(diffuse->getColourExpression(IShaderLayer::COMP_RED)->getExpressionString(), "time * 3.0");
EXPECT_EQ(diffuse->getColourExpression(IShaderLayer::COMP_GREEN)->getExpressionString(), "time * 3.0");
EXPECT_EQ(diffuse->getColourExpression(IShaderLayer::COMP_BLUE)->getExpressionString(), "time * 3.0");
EXPECT_EQ(diffuse->getColourExpression(IShaderLayer::COMP_ALPHA)->getExpressionString(), "time * 3.0");

material = GlobalMaterialManager().getMaterial("textures/parsertest/colourexpr7");

diffuse = material->getAllLayers().front();
diffuse->evaluateExpressions(time);

EXPECT_TRUE(diffuse->getColour() == Colour4(timeSecs * 4, 1, 1, 1)); // second red expression overrules first
EXPECT_EQ(diffuse->getColourExpression(IShaderLayer::COMP_RED)->getExpressionString(), "time * 4.0");
EXPECT_FALSE(diffuse->getColourExpression(IShaderLayer::COMP_GREEN));
EXPECT_FALSE(diffuse->getColourExpression(IShaderLayer::COMP_BLUE));
EXPECT_FALSE(diffuse->getColourExpression(IShaderLayer::COMP_ALPHA));

material = GlobalMaterialManager().getMaterial("textures/parsertest/colourexpr8");

diffuse = material->getAllLayers().front();
diffuse->evaluateExpressions(time);

EXPECT_TRUE(diffuse->getColour() == Colour4(timeSecs * 4, timeSecs * 3, timeSecs * 3, 1)); // red overrules rgb
EXPECT_EQ(diffuse->getColourExpression(IShaderLayer::COMP_RED)->getExpressionString(), "time * 4.0");
EXPECT_EQ(diffuse->getColourExpression(IShaderLayer::COMP_GREEN)->getExpressionString(), "time * 3.0");
EXPECT_EQ(diffuse->getColourExpression(IShaderLayer::COMP_BLUE)->getExpressionString(), "time * 3.0");
EXPECT_FALSE(diffuse->getColourExpression(IShaderLayer::COMP_ALPHA));

material = GlobalMaterialManager().getMaterial("textures/parsertest/colourexpr9");

diffuse = material->getAllLayers().front();
diffuse->evaluateExpressions(time);

EXPECT_TRUE(diffuse->getColour() == Colour4(timeSecs * 3, timeSecs * 4, timeSecs * 3, timeSecs * 3)); // green overrules rgba
EXPECT_EQ(diffuse->getColourExpression(IShaderLayer::COMP_RED)->getExpressionString(), "time * 3.0");
EXPECT_EQ(diffuse->getColourExpression(IShaderLayer::COMP_GREEN)->getExpressionString(), "time * 4.0");
EXPECT_EQ(diffuse->getColourExpression(IShaderLayer::COMP_BLUE)->getExpressionString(), "time * 3.0");
EXPECT_EQ(diffuse->getColourExpression(IShaderLayer::COMP_ALPHA)->getExpressionString(), "time * 3.0");

material = GlobalMaterialManager().getMaterial("textures/parsertest/colourexpr10");

diffuse = material->getAllLayers().front();
diffuse->evaluateExpressions(time);

EXPECT_TRUE(diffuse->getColour() == Colour4(timeSecs * 4, timeSecs * 6, timeSecs * 5, timeSecs * 7)); // rgba is overridden
EXPECT_EQ(diffuse->getColourExpression(IShaderLayer::COMP_RED)->getExpressionString(), "time * 4.0");
EXPECT_EQ(diffuse->getColourExpression(IShaderLayer::COMP_GREEN)->getExpressionString(), "time * 6.0");
EXPECT_EQ(diffuse->getColourExpression(IShaderLayer::COMP_BLUE)->getExpressionString(), "time * 5.0");
EXPECT_EQ(diffuse->getColourExpression(IShaderLayer::COMP_ALPHA)->getExpressionString(), "time * 7.0");
}

}
99 changes: 98 additions & 1 deletion test/resources/tdm/materials/parsertest.mtr
Expand Up @@ -320,4 +320,101 @@ textures/parsertest/guisurf4
discrete
guiSurf entity3
playerclip
}
}

textures/parsertest/colourexpr1
{
{
blend diffusemap
map _white
red time*3
}
}

textures/parsertest/colourexpr2
{
{
blend diffusemap
map _white
green time*3
}
}

textures/parsertest/colourexpr3
{
{
blend diffusemap
map _white
blue time*3
}
}

textures/parsertest/colourexpr4
{
{
blend diffusemap
map _white
alpha time*3
}
}

textures/parsertest/colourexpr5
{
{
blend diffusemap
map _white
rgb time*3
}
}

textures/parsertest/colourexpr6
{
{
blend diffusemap
map _white
rgba time*3
}
}

textures/parsertest/colourexpr7
{
{
blend diffusemap
map _white
red time*3
red time*4
}
}

textures/parsertest/colourexpr8
{
{
blend diffusemap
map _white
rgb time*3
red time*4
}
}

textures/parsertest/colourexpr9
{
{
blend diffusemap
map _white
rgba time*3
green time*4
}
}

textures/parsertest/colourexpr10
{
{
blend diffusemap
map _white
rgba time*3
red time*4
blue time*5
green time*6
alpha time*7
}
}

0 comments on commit 99fc006

Please sign in to comment.