From 157e74b0168ff250e47d5921c28ba03676c8f71f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Leclercq?= Date: Sat, 25 Dec 2021 14:02:22 +0100 Subject: [PATCH] Shader/GlslWriter: Reorder function implementations --- src/Nazara/Shader/GlslWriter.cpp | 232 ++++++++++++++++--------------- 1 file changed, 117 insertions(+), 115 deletions(-) diff --git a/src/Nazara/Shader/GlslWriter.cpp b/src/Nazara/Shader/GlslWriter.cpp index d9573a754..12a96d6b9 100644 --- a/src/Nazara/Shader/GlslWriter.cpp +++ b/src/Nazara/Shader/GlslWriter.cpp @@ -736,37 +736,6 @@ namespace Nz node.right->Visit(*this); } - void GlslWriter::Visit(ShaderAst::BranchStatement& node) - { - assert(!node.isConst); - - bool first = true; - for (const auto& statement : node.condStatements) - { - if (!first) - Append("else "); - - Append("if ("); - statement.condition->Visit(*this); - AppendLine(")"); - - EnterScope(); - statement.statement->Visit(*this); - LeaveScope(); - - first = false; - } - - if (node.elseStatement) - { - AppendLine("else"); - - EnterScope(); - node.elseStatement->Visit(*this); - LeaveScope(); - } - } - void GlslWriter::Visit(ShaderAst::BinaryExpression& node) { Visit(node.left, true); @@ -854,6 +823,123 @@ namespace Nz static_assert(AlwaysFalse::value, "non-exhaustive visitor"); }, node.value); } + + + void GlslWriter::Visit(ShaderAst::IntrinsicExpression& node) + { + switch (node.intrinsic) + { + case ShaderAst::IntrinsicType::CrossProduct: + Append("cross"); + break; + + case ShaderAst::IntrinsicType::DotProduct: + Append("dot"); + break; + + case ShaderAst::IntrinsicType::Exp: + Append("exp"); + break; + + case ShaderAst::IntrinsicType::Length: + Append("length"); + break; + + case ShaderAst::IntrinsicType::Max: + Append("max"); + break; + + case ShaderAst::IntrinsicType::Min: + Append("min"); + break; + + case ShaderAst::IntrinsicType::Pow: + Append("pow"); + break; + + case ShaderAst::IntrinsicType::SampleTexture: + Append("texture"); + break; + } + + Append("("); + for (std::size_t i = 0; i < node.parameters.size(); ++i) + { + if (i != 0) + Append(", "); + + node.parameters[i]->Visit(*this); + } + Append(")"); + } + + void GlslWriter::Visit(ShaderAst::SwizzleExpression& node) + { + Visit(node.expression, true); + Append("."); + + const char* componentStr = "xyzw"; + for (std::size_t i = 0; i < node.componentCount; ++i) + Append(componentStr[node.components[i]]); + } + + void GlslWriter::Visit(ShaderAst::UnaryExpression& node) + { + switch (node.op) + { + case ShaderAst::UnaryType::LogicalNot: + Append("!"); + break; + + case ShaderAst::UnaryType::Minus: + Append("-"); + break; + + case ShaderAst::UnaryType::Plus: + Append("+"); + break; + } + + Visit(node.expression); + } + + void GlslWriter::Visit(ShaderAst::VariableExpression& node) + { + const std::string& varName = Retrieve(m_currentState->variableNames, node.variableId); + Append(varName); + } + + + void GlslWriter::Visit(ShaderAst::BranchStatement& node) + { + assert(!node.isConst); + + bool first = true; + for (const auto& statement : node.condStatements) + { + if (!first) + Append("else "); + + Append("if ("); + statement.condition->Visit(*this); + AppendLine(")"); + + EnterScope(); + statement.statement->Visit(*this); + LeaveScope(); + + first = false; + } + + if (node.elseStatement) + { + AppendLine("else"); + + EnterScope(); + node.elseStatement->Visit(*this); + LeaveScope(); + } + } void GlslWriter::Visit(ShaderAst::DeclareConstStatement& /*node*/) { @@ -1064,54 +1150,6 @@ namespace Nz Append(";"); } - void GlslWriter::Visit(ShaderAst::IntrinsicExpression& node) - { - switch (node.intrinsic) - { - case ShaderAst::IntrinsicType::CrossProduct: - Append("cross"); - break; - - case ShaderAst::IntrinsicType::DotProduct: - Append("dot"); - break; - - case ShaderAst::IntrinsicType::Exp: - Append("exp"); - break; - - case ShaderAst::IntrinsicType::Length: - Append("length"); - break; - - case ShaderAst::IntrinsicType::Max: - Append("max"); - break; - - case ShaderAst::IntrinsicType::Min: - Append("min"); - break; - - case ShaderAst::IntrinsicType::Pow: - Append("pow"); - break; - - case ShaderAst::IntrinsicType::SampleTexture: - Append("texture"); - break; - } - - Append("("); - for (std::size_t i = 0; i < node.parameters.size(); ++i) - { - if (i != 0) - Append(", "); - - node.parameters[i]->Visit(*this); - } - Append(")"); - } - void GlslWriter::Visit(ShaderAst::MultiStatement& node) { AppendStatementList(node.statements); @@ -1190,42 +1228,6 @@ namespace Nz LeaveScope(); } - void GlslWriter::Visit(ShaderAst::SwizzleExpression& node) - { - Visit(node.expression, true); - Append("."); - - const char* componentStr = "xyzw"; - for (std::size_t i = 0; i < node.componentCount; ++i) - Append(componentStr[node.components[i]]); - } - - void GlslWriter::Visit(ShaderAst::VariableExpression& node) - { - const std::string& varName = Retrieve(m_currentState->variableNames, node.variableId); - Append(varName); - } - - void GlslWriter::Visit(ShaderAst::UnaryExpression& node) - { - switch (node.op) - { - case ShaderAst::UnaryType::LogicalNot: - Append("!"); - break; - - case ShaderAst::UnaryType::Minus: - Append("-"); - break; - - case ShaderAst::UnaryType::Plus: - Append("+"); - break; - } - - Visit(node.expression); - } - bool GlslWriter::HasExplicitBinding(ShaderAst::StatementPtr& shader) { /*for (const auto& uniform : shader.GetUniforms())