]> git.tdb.fi Git - libs/gl.git/blobdiff - source/glsl/optimize.cpp
Eliminate constant ternary expressions
[libs/gl.git] / source / glsl / optimize.cpp
index 9cfad86a69d70069fcf6abf2e5877bb99f167000..7473fe2ca598ad996ee6c3263385f938986e80e2 100644 (file)
@@ -792,6 +792,24 @@ void ConstantConditionEliminator::visit(Block &block)
        }
 }
 
+void ConstantConditionEliminator::visit(RefPtr<Expression> &expr)
+{
+       r_ternary_result = 0;
+       expr->visit(*this);
+       if(r_ternary_result)
+               expr = r_ternary_result;
+       r_ternary_result = 0;
+}
+
+void ConstantConditionEliminator::visit(TernaryExpression &ternary)
+{
+       ConstantStatus result = check_constant_condition(*ternary.condition);
+       if(result!=NOT_CONSTANT)
+               r_ternary_result = (result==CONSTANT_TRUE ? ternary.true_expr : ternary.false_expr);
+       else
+               r_ternary_result = 0;
+}
+
 void ConstantConditionEliminator::visit(Conditional &cond)
 {
        ConstantStatus result = check_constant_condition(*cond.condition);