Added support for loops.
Review URL: http://codereview.appspot.com/802047
git-svn-id: https://angleproject.googlecode.com/svn/trunk@91 736b8ea6-26fd-11df-bfd4-992fa37f6226
diff --git a/src/compiler/OutputGLSL.cpp b/src/compiler/OutputGLSL.cpp
index b997c5e..925c5be 100644
--- a/src/compiler/OutputGLSL.cpp
+++ b/src/compiler/OutputGLSL.cpp
@@ -467,8 +467,49 @@
bool TOutputGLSL::visitLoop(Visit visit, TIntermLoop* node)
{
- UNIMPLEMENTED();
- return true;
+ TInfoSinkBase& out = objSink();
+
+ // Loop header.
+ if (node->testFirst()) // for loop
+ {
+ out << "for (";
+ if (node->getInit())
+ node->getInit()->traverse(this);
+ out << "; ";
+
+ ASSERT(node->getTest() != NULL);
+ node->getTest()->traverse(this);
+ out << "; ";
+
+ if (node->getTerminal())
+ node->getTerminal()->traverse(this);
+ out << ") {\n";
+ }
+ else // do-while loop
+ {
+ out << "do {\n";
+ }
+
+ // Loop body.
+ if (node->getBody())
+ node->getBody()->traverse(this);
+
+ // Loop footer.
+ if (node->testFirst()) // for loop
+ {
+ out << "}\n";
+ }
+ else // do-while loop
+ {
+ out << "} while (";
+ ASSERT(node->getTest() != NULL);
+ node->getTest()->traverse(this);
+ out << ");\n";
+ }
+
+ // No need to visit children. They have been already processed in
+ // this function.
+ return false;
}
bool TOutputGLSL::visitBranch(Visit visit, TIntermBranch* node)