Skip to content

Commit

Permalink
#5565: Export vertexProgram + parms
Browse files Browse the repository at this point in the history
  • Loading branch information
codereader committed Mar 26, 2021
1 parent d459f81 commit 873fb18
Show file tree
Hide file tree
Showing 2 changed files with 78 additions and 0 deletions.
22 changes: 22 additions & 0 deletions radiantcore/shaders/MaterialSourceGenerator.cpp
Expand Up @@ -293,6 +293,28 @@ std::ostream& operator<<(std::ostream& stream, Doom3ShaderLayer& layer)
};
}

// Vertex Programs
if (!layer.getVertexProgram().empty())
{
stream << "\t\tvertexProgram " << layer.getVertexProgram() << "\n";

for (int i = 0; i < layer.getNumVertexParms(); ++i)
{
const auto& parm = layer.getVertexParm(i);

if (!parm.expressions[0])
{
continue; // skip empty parms
}

stream << "\t\tvertexParm " << i << " "
<< (parm.expressions[0] ? parm.expressions[0]->getExpressionString() : "")
<< (parm.expressions[1] ? ", " + parm.expressions[1]->getExpressionString() : "")
<< (parm.expressions[2] ? ", " + parm.expressions[2]->getExpressionString() : "")
<< (parm.expressions[3] ? ", " + parm.expressions[3]->getExpressionString() : "") << "\n";
}
}

stream << "\t}\n";

return stream;
Expand Down
56 changes: 56 additions & 0 deletions test/MaterialExport.cpp
Expand Up @@ -929,4 +929,60 @@ TEST_F(MaterialExportTest, StageCondition)
expectDefinitionDoesNotContain(material, "if");
}

TEST_F(MaterialExportTest, VertexPrograms)
{
auto material = GlobalMaterialManager().getMaterial("textures/parsertest/program/vertexProgram1");
EXPECT_EQ(material->getAllLayers().at(0)->getVertexProgram(), "glprogs/test.vfp");

// Mark the definition as modified by setting the description
material->setDescription("-");

expectDefinitionContains(material, "vertexProgram glprogs/test.vfp");
expectDefinitionContains(material, "vertexParm 0 time");

material = GlobalMaterialManager().getMaterial("textures/parsertest/program/vertexProgram2");
EXPECT_EQ(material->getAllLayers().at(0)->getVertexProgram(), "glprogs/test.vfp");
material->setDescription("-");

expectDefinitionContains(material, "vertexProgram glprogs/test.vfp");
expectDefinitionContains(material, "vertexParm 0 time, 3.0");

material = GlobalMaterialManager().getMaterial("textures/parsertest/program/vertexProgram3");
EXPECT_EQ(material->getAllLayers().at(0)->getVertexProgram(), "glprogs/test.vfp");
material->setDescription("-");

expectDefinitionContains(material, "vertexProgram glprogs/test.vfp");
expectDefinitionContains(material, "vertexParm 0 time, 3.0, global3");

material = GlobalMaterialManager().getMaterial("textures/parsertest/program/vertexProgram4");
EXPECT_EQ(material->getAllLayers().at(0)->getVertexProgram(), "glprogs/test.vfp");
material->setDescription("-");

expectDefinitionContains(material, "vertexProgram glprogs/test.vfp");
expectDefinitionContains(material, "vertexParm 0 time, 3.0, global3, time * 2.0");

material = GlobalMaterialManager().getMaterial("textures/parsertest/program/vertexProgram5");
EXPECT_EQ(material->getAllLayers().at(0)->getVertexProgram(), "glprogs/test.vfp");
material->setDescription("-");

expectDefinitionContains(material, "vertexProgram glprogs/test.vfp");
expectDefinitionContains(material, "vertexParm 0 time, 3.0, global3, time * 2.0");
expectDefinitionContains(material, "vertexParm 1 1.0, 2.0, 3.0, 4.0");
expectDefinitionContains(material, "vertexParm 2 5.0, 6.0, 7.0, 8.0");

material = GlobalMaterialManager().getMaterial("textures/parsertest/program/vertexProgram6");
EXPECT_EQ(material->getAllLayers().at(0)->getVertexProgram(), "glprogs/test.vfp");
// Vertex Parm 1 is empty
EXPECT_FALSE(material->getAllLayers().at(0)->getVertexParm(1).expressions[0]);
EXPECT_FALSE(material->getAllLayers().at(0)->getVertexParm(1).expressions[1]);
EXPECT_FALSE(material->getAllLayers().at(0)->getVertexParm(1).expressions[2]);
EXPECT_FALSE(material->getAllLayers().at(0)->getVertexParm(1).expressions[3]);
material->setDescription("-");

expectDefinitionContains(material, "vertexProgram glprogs/test.vfp");
expectDefinitionContains(material, "vertexParm 0 time, 3.0, global3, time * 2.0");
expectDefinitionDoesNotContain(material, "vertexParm 1"); // should be missing
expectDefinitionContains(material, "vertexParm 2 5.0, 6.0, 7.0, 8.0");
}

}

0 comments on commit 873fb18

Please sign in to comment.