Skip to content

Commit

Permalink
#6212: Implement frob stage setters
Browse files Browse the repository at this point in the history
  • Loading branch information
codereader committed Jan 2, 2023
1 parent 83e3fd8 commit a399a0e
Show file tree
Hide file tree
Showing 4 changed files with 51 additions and 5 deletions.
8 changes: 4 additions & 4 deletions radiantcore/shaders/CShader.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -199,7 +199,7 @@ Material::FrobStageType CShader::getFrobStageType()
void CShader::setFrobStageType(Material::FrobStageType type)
{
ensureTemplateCopy();
// TODO
_template->setFrobStageType(type);
}

IMapExpression::Ptr CShader::getFrobStageMapExpression()
Expand All @@ -210,7 +210,7 @@ IMapExpression::Ptr CShader::getFrobStageMapExpression()
void CShader::setFrobStageMapExpressionFromString(const std::string& expr)
{
ensureTemplateCopy();
// TODO
_template->setFrobStageMapExpressionFromString(expr);
}

Vector3 CShader::getFrobStageRgbParameter(std::size_t index)
Expand All @@ -221,13 +221,13 @@ Vector3 CShader::getFrobStageRgbParameter(std::size_t index)
void CShader::setFrobStageParameter(std::size_t index, double value)
{
ensureTemplateCopy();
// TODO
_template->setFrobStageParameter(index, value);
}

void CShader::setFrobStageRgbParameter(std::size_t index, const Vector3& value)
{
ensureTemplateCopy();
// TODO
_template->setFrobStageRgbParameter(index, value);
}

bool CShader::IsInUse() const {
Expand Down
41 changes: 41 additions & 0 deletions radiantcore/shaders/ShaderTemplate.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -119,6 +119,47 @@ void ShaderTemplate::setDecalInfo(const Material::DecalInfo& info)
onTemplateChanged();
}

void ShaderTemplate::setFrobStageType(Material::FrobStageType type)
{
ensureParsed();

_frobStageType = type;

onTemplateChanged();
}

void ShaderTemplate::setFrobStageMapExpressionFromString(const std::string& expr)
{
ensureParsed();

if (!expr.empty())
{
_frobStageMapExpression = MapExpression::createForString(expr);
}
else
{
_frobStageMapExpression.reset();
}

onTemplateChanged();
}

void ShaderTemplate::setFrobStageParameter(std::size_t index, double value)
{
setFrobStageRgbParameter(index, Vector3(value, value, value));
}

void ShaderTemplate::setFrobStageRgbParameter(std::size_t index, const Vector3& value)
{
if (index > 1) throw std::out_of_range("Index must be 0 or 1");

ensureParsed();

_frobStageRgbParameter[index] = value;

onTemplateChanged();
}

IShaderExpression::Ptr ShaderTemplate::parseSingleExpressionTerm(parser::DefTokeniser& tokeniser)
{
std::string token = tokeniser.nextToken();
Expand Down
5 changes: 5 additions & 0 deletions radiantcore/shaders/ShaderTemplate.h
Original file line number Diff line number Diff line change
Expand Up @@ -520,6 +520,11 @@ class ShaderTemplate final :
return index < 2 ? _frobStageRgbParameter[index] : Vector3(0,0,0);
}

void setFrobStageType(Material::FrobStageType type);
void setFrobStageMapExpressionFromString(const std::string& expr);
void setFrobStageParameter(std::size_t index, double value);
void setFrobStageRgbParameter(std::size_t index, const Vector3& value);

std::size_t addLayer(IShaderLayer::Type type);
void removeLayer(std::size_t index);
void swapLayerPosition(std::size_t first, std::size_t second);
Expand Down
2 changes: 1 addition & 1 deletion test/MaterialExport.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1200,7 +1200,7 @@ TEST_F(MaterialExportTest, FrobStageKeywords)
// Texture
material->setFrobStageType(Material::FrobStageType::Texture);

// Still contains the RGB values from the diffuse test above
// Still contains the RGB values from the diffuse test above, but with the default _white
expectDefinitionContains(material, "frobstage_texture _white (0.7 0.8 0.6) (0.1 0.3 0.5)");

material->setFrobStageParameter(0, 0.2);
Expand Down

0 comments on commit a399a0e

Please sign in to comment.