]> git.tdb.fi Git - libs/gl.git/blobdiff - source/glsl/optimize.cpp
Implement the ternary operator in GLSL
[libs/gl.git] / source / glsl / optimize.cpp
index 9ab8ef70ef94dfc235e08ecee479792f9ae9cf2b..8f6b2745846b0a31e285a746dca714bfa3227332 100644 (file)
@@ -452,6 +452,15 @@ void ExpressionInliner::visit(Assignment &assign)
        r_trivial = false;
 }
 
+void ExpressionInliner::visit(TernaryExpression &ternary)
+{
+       visit_and_record(ternary.condition, ternary.oper, false);
+       visit_and_record(ternary.true_expr, ternary.oper, false);
+       visit_and_record(ternary.false_expr, ternary.oper, true);
+       r_oper = ternary.oper;
+       r_trivial = false;
+}
+
 void ExpressionInliner::visit(FunctionCall &call)
 {
        TraversingVisitor::visit(call);
@@ -581,6 +590,12 @@ void UnusedTypeRemover::visit(BinaryExpression &binary)
        TraversingVisitor::visit(binary);
 }
 
+void UnusedTypeRemover::visit(TernaryExpression &ternary)
+{
+       unused_nodes.erase(ternary.type);
+       TraversingVisitor::visit(ternary);
+}
+
 void UnusedTypeRemover::visit(FunctionCall &call)
 {
        unused_nodes.erase(call.type);