X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fglsl%2Fgenerate.cpp;h=3707e4eda2cabc902397f0d9a344950462f24fcc;hb=488ffa4e7136cb163004befa67f20f553bc82f2e;hp=ac16c31f889dce86ae02541121802d84b59a496e;hpb=ab5f2e6f1ddd35f8f117460530d76c0ba0c9bc87;p=libs%2Fgl.git diff --git a/source/glsl/generate.cpp b/source/glsl/generate.cpp index ac16c31f..3707e4ed 100644 --- a/source/glsl/generate.cpp +++ b/source/glsl/generate.cpp @@ -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) {