Skip to content

Commit

Permalink
#5532: Max number of vertexParms is 4.
Browse files Browse the repository at this point in the history
  • Loading branch information
codereader committed Feb 28, 2021
1 parent c413f29 commit 1041b6f
Show file tree
Hide file tree
Showing 4 changed files with 22 additions and 1 deletion.
2 changes: 2 additions & 0 deletions libs/materials/ParseLib.h
Expand Up @@ -123,4 +123,6 @@ inline std::string getStringForTexGenType(ShaderLayer::TexGenType type)
return std::string();
}

constexpr int NUM_MAX_VERTEX_PARMS = 4;

}
5 changes: 5 additions & 0 deletions radiantcore/shaders/ShaderTemplate.cpp
Expand Up @@ -786,6 +786,11 @@ bool ShaderTemplate::parseStageModifiers(parser::DefTokeniser& tokeniser,
// vertexParm <parmNum> <parm1> [,<parm2>] [,<parm3>] [,<parm4>]
parm.index = string::convert<int>(tokeniser.nextToken());

if (parm.index < 0 || parm.index >= NUM_MAX_VERTEX_PARMS)
{
throw parser::ParseException(fmt::format("A material stage can have {0} vertex parameters at most", NUM_MAX_VERTEX_PARMS));
}

parm.expressions[0] = ShaderExpression::createFromTokens(tokeniser);

for (int i = 1; i < 4 && tokeniser.peek() == ","; ++i)
Expand Down
3 changes: 3 additions & 0 deletions test/Materials.cpp
Expand Up @@ -398,6 +398,9 @@ TEST_F(MaterialsTest, MaterialParserStageVertexProgram)
EXPECT_EQ(material->getAllLayers().front()->getVertexParm(2).expressions[1]->getExpressionString(), "6.0");
EXPECT_EQ(material->getAllLayers().front()->getVertexParm(2).expressions[2]->getExpressionString(), "7.0");
EXPECT_EQ(material->getAllLayers().front()->getVertexParm(2).expressions[3]->getExpressionString(), "8.0");

material = GlobalMaterialManager().getMaterialForName("textures/parsertest/program/vertexProgram7");
EXPECT_TRUE(material->getAllLayers().empty()); // failure to parse should end up with an empty material
}

}
13 changes: 12 additions & 1 deletion test/resources/tdm/materials/parsertest.mtr
Expand Up @@ -244,4 +244,15 @@ textures/parsertest/program/vertexProgram6
// index 1 is missing
vertexParm 2 5,6,7,8
}
}
}

textures/parsertest/program/vertexProgram7
{
{
map _white
vertexProgram glprogs/test.vfp

// Maximum number of vertexParms is 4, index 5 is invalid
vertexParm 5 5,6,7,8
}
}

0 comments on commit 1041b6f

Please sign in to comment.