]> git.tdb.fi Git - libs/gl.git/blobdiff - source/programcompiler.cpp
Support while loops in GLSL
[libs/gl.git] / source / programcompiler.cpp
index fd9c50dbbb5c2879e55fb528035f7527aef126ff..afb2a3c32ecac3465cfe8620e74f816beeb84473 100644 (file)
@@ -543,23 +543,32 @@ void ProgramCompiler::Formatter::visit(Conditional &cond)
 
 void ProgramCompiler::Formatter::visit(Iteration &iter)
 {
 
 void ProgramCompiler::Formatter::visit(Iteration &iter)
 {
-       formatted += "for(";
-       if(iter.init_statement)
-               iter.init_statement->visit(*this);
-       else
-               formatted += ';';
-       if(iter.condition)
+       if(!iter.init_statement && iter.condition && !iter.loop_expression)
        {
        {
-               formatted += ' ';
+               formatted += "while(";
                iter.condition->visit(*this);
                iter.condition->visit(*this);
+               formatted += ')';
        }
        }
-       formatted += ';';
-       if(iter.loop_expression)
+       else
        {
        {
-               formatted += ' ';
-               iter.loop_expression->visit(*this);
+               formatted += "for(";
+               if(iter.init_statement)
+                       iter.init_statement->visit(*this);
+               else
+                       formatted += ';';
+               if(iter.condition)
+               {
+                       formatted += ' ';
+                       iter.condition->visit(*this);
+               }
+               formatted += ';';
+               if(iter.loop_expression)
+               {
+                       formatted += ' ';
+                       iter.loop_expression->visit(*this);
+               }
+               formatted += ')';
        }
        }
-       formatted += ')';
 
        if(iter.body.body.empty())
                formatted += " { }";
 
        if(iter.body.body.empty())
                formatted += " { }";