Renderer/GlslWriter: Add parenthesis where required (wip)

This commit is contained in:
Jérôme Leclercq 2020-07-22 14:48:15 +02:00
parent c6c301c9f5
commit 063b7dd602
2 changed files with 17 additions and 5 deletions

View File

@ -61,6 +61,7 @@ namespace Nz
using ShaderVarVisitor::Visit;
using ShaderVisitor::Visit;
void Visit(const ShaderNodes::ExpressionPtr& expr, bool encloseIfRequired = false);
void Visit(const ShaderNodes::AccessMember& node) override;
void Visit(const ShaderNodes::AssignOp& node) override;
void Visit(const ShaderNodes::Branch& node) override;

View File

@ -297,11 +297,22 @@ namespace Nz
AppendLine("}");
}
void GlslWriter::Visit(const ShaderNodes::ExpressionPtr& expr, bool encloseIfRequired)
{
bool enclose = encloseIfRequired && (expr->GetExpressionCategory() != ShaderNodes::ExpressionCategory::LValue);
if (enclose)
Append("(");
ShaderVisitor::Visit(expr);
if (enclose)
Append(")");
}
void GlslWriter::Visit(const ShaderNodes::AccessMember& node)
{
Append("(");
Visit(node.structExpr);
Append(")");
Visit(node.structExpr, true);
const ShaderExpressionType& exprType = node.structExpr->GetExpressionType();
assert(std::holds_alternative<std::string>(exprType));
@ -365,7 +376,7 @@ namespace Nz
void GlslWriter::Visit(const ShaderNodes::BinaryOp& node)
{
Visit(node.left);
Visit(node.left, true);
switch (node.op)
{
@ -386,7 +397,7 @@ namespace Nz
break;
}
Visit(node.right);
Visit(node.right, true);
}
void GlslWriter::Visit(const ShaderNodes::BuiltinVariable& var)