Skip to content

Commit

Permalink
#5565: Export simple material flags
Browse files Browse the repository at this point in the history
  • Loading branch information
codereader committed Mar 25, 2021
1 parent 0408581 commit 4564b62
Show file tree
Hide file tree
Showing 3 changed files with 54 additions and 0 deletions.
29 changes: 29 additions & 0 deletions libs/materials/ParseLib.h
Expand Up @@ -7,6 +7,35 @@
namespace shaders
{

constexpr std::pair<const char*, Material::Flags> MaterialFlagKeywords[]
{
{ "noShadows", Material::FLAG_NOSHADOWS },
{ "noSelfShadow", Material::FLAG_NOSELFSHADOW },
{ "forceShadows", Material::FLAG_FORCESHADOWS },
{ "noOverlays", Material::FLAG_NOOVERLAYS },
{ "forceOverlays", Material::FLAG_FORCEOVERLAYS },
{ "translucent", Material::FLAG_TRANSLUCENT },
{ "forceOpaque", Material::FLAG_FORCEOPAQUE },
{ "noFog", Material::FLAG_NOFOG },
{ "noPortalFog", Material::FLAG_NOPORTALFOG },
{ "unsmoothedTangents", Material::FLAG_UNSMOOTHEDTANGENTS },
{ "mirror", Material::FLAG_MIRROR },
{ "isLightgemSurf", Material::FLAG_ISLIGHTGEMSURF },
};

inline std::string getStringForMaterialFlag(Material::Flags flag)
{
for (const auto& pair : MaterialFlagKeywords)
{
if (flag == pair.second)
{
return pair.first;
}
}

return std::string();
}

constexpr std::pair<const char*, Material::SurfaceType> SurfaceTypeMapping[]
{
{ "metal", Material::SURFTYPE_METAL },
Expand Down
9 changes: 9 additions & 0 deletions radiantcore/shaders/MaterialSourceGenerator.cpp
Expand Up @@ -22,6 +22,15 @@ std::ostream& operator<<(std::ostream& stream, ShaderTemplate& shaderTemplate)
stream << "\tdescription \"" << string::replace_all_copy(shaderTemplate.getDescription(), "\"", "'") << "\"\n";
}

// Go through the material flags which reflect a single keyword
for (const auto& pair : shaders::MaterialFlagKeywords)
{
if (shaderTemplate.getMaterialFlags() & pair.second)
{
stream << "\t" << pair.first << "\n";
}
}

if (shaderTemplate.getMaterialFlags() & Material::FLAG_POLYGONOFFSET)
{
stream << fmt::format("\tpolygonOffset {0}\n", shaderTemplate.getPolygonOffset());
Expand Down
16 changes: 16 additions & 0 deletions test/MaterialExport.cpp
Expand Up @@ -81,4 +81,20 @@ TEST_F(MaterialExportTest, SurfaceType)
expectDefinitionDoesNotContain(material, "lastSurfaceType");
}

TEST_F(MaterialExportTest, MaterialFlags)
{
auto material = GlobalMaterialManager().getMaterial("textures/exporttest/empty");

EXPECT_EQ(string::trim_copy(material->getDefinition()), "");

for (const auto& pair : shaders::MaterialFlagKeywords)
{
material->setMaterialFlag(pair.second);
expectDefinitionContains(material, pair.first);

material->clearMaterialFlag(pair.second);
expectDefinitionDoesNotContain(material, pair.first);
}
}

}

0 comments on commit 4564b62

Please sign in to comment.