Shader/GlslWriter: Reorder function implementations
This commit is contained in:
parent
f798901c23
commit
157e74b016
|
|
@ -736,37 +736,6 @@ namespace Nz
|
||||||
node.right->Visit(*this);
|
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)
|
void GlslWriter::Visit(ShaderAst::BinaryExpression& node)
|
||||||
{
|
{
|
||||||
Visit(node.left, true);
|
Visit(node.left, true);
|
||||||
|
|
@ -854,6 +823,123 @@ namespace Nz
|
||||||
static_assert(AlwaysFalse<T>::value, "non-exhaustive visitor");
|
static_assert(AlwaysFalse<T>::value, "non-exhaustive visitor");
|
||||||
}, node.value);
|
}, 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*/)
|
void GlslWriter::Visit(ShaderAst::DeclareConstStatement& /*node*/)
|
||||||
{
|
{
|
||||||
|
|
@ -1064,54 +1150,6 @@ namespace Nz
|
||||||
Append(";");
|
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)
|
void GlslWriter::Visit(ShaderAst::MultiStatement& node)
|
||||||
{
|
{
|
||||||
AppendStatementList(node.statements);
|
AppendStatementList(node.statements);
|
||||||
|
|
@ -1190,42 +1228,6 @@ namespace Nz
|
||||||
LeaveScope();
|
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)
|
bool GlslWriter::HasExplicitBinding(ShaderAst::StatementPtr& shader)
|
||||||
{
|
{
|
||||||
/*for (const auto& uniform : shader.GetUniforms())
|
/*for (const auto& uniform : shader.GetUniforms())
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue