X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=blobdiff_plain;f=source%2Fglsl%2Fgenerate.cpp;h=113b4324aa2b64432b41cf7be63ff13ca30ed8c4;hp=1f229991f7b2427e45b7fe511099dd2a894774c5;hb=7f2ffe6e62bc7d7b2af7d3c3cccc57f87d8bf90f;hpb=2a9f8f3803e1b57e0e5325454266d4e701b38cc5 diff --git a/source/glsl/generate.cpp b/source/glsl/generate.cpp index 1f229991..113b4324 100644 --- a/source/glsl/generate.cpp +++ b/source/glsl/generate.cpp @@ -917,8 +917,9 @@ bool FunctionResolver::apply(Stage &s) void FunctionResolver::visit(FunctionCall &call) { map::iterator i = stage->functions.find(call.name); - if(i!=stage->functions.end()) - call.declaration = i->second; + FunctionDeclaration *declaration = (i!=stage->functions.end() ? i->second : 0); + r_any_resolved |= (declaration!=call.declaration); + call.declaration = declaration; TraversingVisitor::visit(call); } @@ -934,17 +935,19 @@ void FunctionResolver::visit(FunctionDeclaration &func) // Set all previous declarations to use this definition. for(vector::iterator i=decls.begin(); i!=decls.end(); ++i) { + r_any_resolved |= (func.definition!=(*i)->definition); (*i)->definition = func.definition; (*i)->body.body.clear(); } } else { - func.definition = 0; + FunctionDeclaration *definition = (stage_decl ? stage_decl->definition : 0); + r_any_resolved |= (definition!=func.definition); + func.definition = definition; + if(!stage_decl) stage_decl = &func; - else - func.definition = stage_decl->definition; } decls.push_back(&func);