Renderer/GlslWriter: Add parenthesis where required (wip)
This commit is contained in:
parent
c6c301c9f5
commit
063b7dd602
|
|
@ -61,6 +61,7 @@ namespace Nz
|
||||||
|
|
||||||
using ShaderVarVisitor::Visit;
|
using ShaderVarVisitor::Visit;
|
||||||
using ShaderVisitor::Visit;
|
using ShaderVisitor::Visit;
|
||||||
|
void Visit(const ShaderNodes::ExpressionPtr& expr, bool encloseIfRequired = false);
|
||||||
void Visit(const ShaderNodes::AccessMember& node) override;
|
void Visit(const ShaderNodes::AccessMember& node) override;
|
||||||
void Visit(const ShaderNodes::AssignOp& node) override;
|
void Visit(const ShaderNodes::AssignOp& node) override;
|
||||||
void Visit(const ShaderNodes::Branch& node) override;
|
void Visit(const ShaderNodes::Branch& node) override;
|
||||||
|
|
|
||||||
|
|
@ -297,11 +297,22 @@ namespace Nz
|
||||||
AppendLine("}");
|
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)
|
void GlslWriter::Visit(const ShaderNodes::AccessMember& node)
|
||||||
{
|
{
|
||||||
Append("(");
|
Visit(node.structExpr, true);
|
||||||
Visit(node.structExpr);
|
|
||||||
Append(")");
|
|
||||||
|
|
||||||
const ShaderExpressionType& exprType = node.structExpr->GetExpressionType();
|
const ShaderExpressionType& exprType = node.structExpr->GetExpressionType();
|
||||||
assert(std::holds_alternative<std::string>(exprType));
|
assert(std::holds_alternative<std::string>(exprType));
|
||||||
|
|
@ -365,7 +376,7 @@ namespace Nz
|
||||||
|
|
||||||
void GlslWriter::Visit(const ShaderNodes::BinaryOp& node)
|
void GlslWriter::Visit(const ShaderNodes::BinaryOp& node)
|
||||||
{
|
{
|
||||||
Visit(node.left);
|
Visit(node.left, true);
|
||||||
|
|
||||||
switch (node.op)
|
switch (node.op)
|
||||||
{
|
{
|
||||||
|
|
@ -386,7 +397,7 @@ namespace Nz
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
Visit(node.right);
|
Visit(node.right, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
void GlslWriter::Visit(const ShaderNodes::BuiltinVariable& var)
|
void GlslWriter::Visit(const ShaderNodes::BuiltinVariable& var)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue