From 063b7dd6020e10813ff2505e699c5020ca38acaa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Leclercq?= Date: Wed, 22 Jul 2020 14:48:15 +0200 Subject: [PATCH] Renderer/GlslWriter: Add parenthesis where required (wip) --- include/Nazara/Renderer/GlslWriter.hpp | 1 + src/Nazara/Renderer/GlslWriter.cpp | 21 ++++++++++++++++----- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/include/Nazara/Renderer/GlslWriter.hpp b/include/Nazara/Renderer/GlslWriter.hpp index ba2444aec..f9694a8f1 100644 --- a/include/Nazara/Renderer/GlslWriter.hpp +++ b/include/Nazara/Renderer/GlslWriter.hpp @@ -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; diff --git a/src/Nazara/Renderer/GlslWriter.cpp b/src/Nazara/Renderer/GlslWriter.cpp index 972cdb4d2..3f2a4a4a3 100644 --- a/src/Nazara/Renderer/GlslWriter.cpp +++ b/src/Nazara/Renderer/GlslWriter.cpp @@ -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(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)