X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=blobdiff_plain;f=source%2Fglsl%2Foptimize.cpp;h=7473fe2ca598ad996ee6c3263385f938986e80e2;hp=9cfad86a69d70069fcf6abf2e5877bb99f167000;hb=c4ae3a80623be4b0f17de4a9cc25f0bedf2dbef5;hpb=5e4204ecaf54f49b63587ef5cd669a1b3838e0e9 diff --git a/source/glsl/optimize.cpp b/source/glsl/optimize.cpp index 9cfad86a..7473fe2c 100644 --- a/source/glsl/optimize.cpp +++ b/source/glsl/optimize.cpp @@ -792,6 +792,24 @@ void ConstantConditionEliminator::visit(Block &block) } } +void ConstantConditionEliminator::visit(RefPtr &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);