Skip to content

Commit

Permalink
#5565: Export ambientRimColour, and store the expressions beforehand
Browse files Browse the repository at this point in the history
  • Loading branch information
codereader committed Mar 26, 2021
1 parent 84986ba commit 112972d
Show file tree
Hide file tree
Showing 4 changed files with 34 additions and 0 deletions.
10 changes: 10 additions & 0 deletions radiantcore/shaders/MaterialSourceGenerator.cpp
Expand Up @@ -553,6 +553,16 @@ std::ostream& operator<<(std::ostream& stream, ShaderTemplate& shaderTemplate)
}
}

// AmbientRimColor
if (shaderTemplate.getAmbientRimColourExpression(0) &&
shaderTemplate.getAmbientRimColourExpression(1) &&
shaderTemplate.getAmbientRimColourExpression(2))
{
stream << "\tambientRimColor " << shaderTemplate.getAmbientRimColourExpression(0)->getExpressionString() << ", "
<< shaderTemplate.getAmbientRimColourExpression(1)->getExpressionString() << ", "
<< shaderTemplate.getAmbientRimColourExpression(2)->getExpressionString() << "\n";
}

for (const auto& layer : shaderTemplate.getLayers())
{
stream << *layer;
Expand Down
7 changes: 7 additions & 0 deletions radiantcore/shaders/ShaderTemplate.cpp
Expand Up @@ -56,6 +56,10 @@ ShaderTemplate::ShaderTemplate(const ShaderTemplate& other) :
_parseFlags(other._parseFlags),
_guiDeclName(other._guiDeclName)
{
_ambientRimColour[0] = other._ambientRimColour[0];
_ambientRimColour[1] = other._ambientRimColour[1];
_ambientRimColour[2] = other._ambientRimColour[2];

// Clone the layers
for (const auto& otherLayer : other._layers)
{
Expand Down Expand Up @@ -444,6 +448,9 @@ bool ShaderTemplate::parseShaderFlags(parser::DefTokeniser& tokeniser,
if (red && green && blue)
{
// ambientrimcolor support not yet added, we need material registers first
_ambientRimColour[0] = red;
_ambientRimColour[1] = green;
_ambientRimColour[2] = blue;
}
else
{
Expand Down
9 changes: 9 additions & 0 deletions radiantcore/shaders/ShaderTemplate.h
Expand Up @@ -102,6 +102,9 @@ class ShaderTemplate final
// The string value specified by the guisurf keyword, if other than entity[2]3]
std::string _guiDeclName;

// The three ambient rim colour expressions (empty if not defined)
IShaderExpression::Ptr _ambientRimColour[3];

// Private copy ctor, used for cloning
ShaderTemplate(const ShaderTemplate& other);

Expand Down Expand Up @@ -484,6 +487,12 @@ class ShaderTemplate final
return _guiDeclName;
}

IShaderExpression::Ptr getAmbientRimColourExpression(std::size_t index)
{
assert(index < 3);
return _ambientRimColour[index];
}

void onTemplateChanged()
{
if (_suppressChangeSignal) return;
Expand Down
8 changes: 8 additions & 0 deletions test/MaterialExport.cpp
Expand Up @@ -1021,4 +1021,12 @@ TEST_F(MaterialExportTest, EditorImage)
expectDefinitionDoesNotContain(material, "qer_editorimage");
}

TEST_F(MaterialExportTest, AmbientRimColour)
{
auto material = GlobalMaterialManager().getMaterial("textures/parsertest/withAmbientRimColor");

material->setDescription("-");
expectDefinitionContains(material, "ambientRimColor parm1 * 3.0, 0.0, time * 6.0");
}

}

0 comments on commit 112972d

Please sign in to comment.