]> git.tdb.fi Git - libs/gl.git/blobdiff - source/glsl/generate.cpp
Fix scoping of GLSL loop variables and function parameters
[libs/gl.git] / source / glsl / generate.cpp
index ac16c31f889dce86ae02541121802d84b59a496e..3707e4eda2cabc902397f0d9a344950462f24fcc 100644 (file)
@@ -96,6 +96,9 @@ void VariableResolver::apply(Stage &stage)
 
 void VariableResolver::visit(Block &block)
 {
+       if(!blocks.empty() && blocks.back()==&block)
+               return TraversingVisitor::visit(block);
+
        blocks.push_back(&block);
        block.variables.clear();
        TraversingVisitor::visit(block);
@@ -215,6 +218,22 @@ void VariableResolver::visit(InterfaceBlock &iface)
        TraversingVisitor::visit(iface);
 }
 
+void VariableResolver::visit(FunctionDeclaration &func)
+{
+       blocks.push_back(&func.body);
+       func.body.variables.clear();
+       TraversingVisitor::visit(func);
+       blocks.pop_back();
+}
+
+void VariableResolver::visit(Iteration &iter)
+{
+       blocks.push_back(&iter.body);
+       iter.body.variables.clear();
+       TraversingVisitor::visit(iter);
+       blocks.pop_back();
+}
+
 
 void FunctionResolver::visit(FunctionCall &call)
 {