X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fglsl%2Fgenerate.cpp;h=ff863824055ae76ef51cc9fdd08521b2b3548aa2;hb=39141d961e55f56d540b3678f9f8fe94868f2652;hp=13b62aa32296a3d6c93c851827387205c08bfed1;hpb=f6dfd3e78fc8c4c4a14619f3fdece53600ab0db7;p=libs%2Fgl.git diff --git a/source/glsl/generate.cpp b/source/glsl/generate.cpp index 13b62aa3..ff863824 100644 --- a/source/glsl/generate.cpp +++ b/source/glsl/generate.cpp @@ -309,28 +309,42 @@ void VariableResolver::visit(InterfaceBlock &iface) } +void FunctionResolver::apply(Stage &s) +{ + stage = &s; + s.content.visit(*this); +} + void FunctionResolver::visit(FunctionCall &call) { - map >::iterator i = functions.find(call.name); - if(i!=functions.end()) - call.declaration = i->second.back(); + map::iterator i = stage->functions.find(call.name); + if(i!=stage->functions.end()) + call.declaration = i->second; TraversingVisitor::visit(call); } void FunctionResolver::visit(FunctionDeclaration &func) { - vector &decls = functions[func.name]; + FunctionDeclaration *&stage_decl = stage->functions[func.name]; + vector &decls = declarations[func.name]; if(func.definition==&func) { + stage_decl = &func; + for(vector::iterator i=decls.begin(); i!=decls.end(); ++i) { (*i)->definition = func.definition; (*i)->body.body.clear(); } } - else if(!decls.empty() && decls.back()->definition) - func.definition = decls.back()->definition; + else + { + if(!stage_decl) + stage_decl = &func; + + func.definition = stage_decl->definition; + } decls.push_back(&func); TraversingVisitor::visit(func);