X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=blobdiff_plain;f=source%2Fglsl%2Fvalidate.cpp;h=b0c6e3d67acb29cb178bbdeb1e7d2812ea16f5be;hp=fcccb526e0dc3bc62831e3c949f8bb767b929591;hb=041ba4b1acd55337239c5ce24cc310118c621206;hpb=cd01b904990d306eadd120f306b1d0ceb4d8f5c8 diff --git a/source/glsl/validate.cpp b/source/glsl/validate.cpp index fcccb526..b0c6e3d6 100644 --- a/source/glsl/validate.cpp +++ b/source/glsl/validate.cpp @@ -149,8 +149,13 @@ void DeclarationValidator::visit(InterfaceBlock &iface) if(!iface.instance_name.empty()) check_definition(iface.instance_name, iface); - SetFlag set_anon(anonymous_block, iface.instance_name.empty()); - TraversingVisitor::visit(iface); + if(iface.instance_name.empty() && iface.struct_declaration) + { + // Inject anonymous interface block members into the global scope + const map &iface_vars = iface.struct_declaration->members.variables; + for(map::const_iterator j=iface_vars.begin(); j!=iface_vars.end(); ++j) + check_definition(j->first, *j->second); + } } void DeclarationValidator::visit(FunctionDeclaration &func) @@ -207,6 +212,13 @@ void ReferenceValidator::visit(VariableDeclaration &var) TraversingVisitor::visit(var); } +void ReferenceValidator::visit(InterfaceBlock &iface) +{ + if(!iface.struct_declaration) + error(iface, format("Interface block '%s %s' lacks a struct declaration", iface.interface, iface.name)); + TraversingVisitor::visit(iface); +} + void ReferenceValidator::visit(FunctionDeclaration &func) { if(!func.return_type_declaration)