X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=blobdiff_plain;f=source%2Fglsl%2Ffinalize.cpp;h=55f7b82e5ed107aae78042d4bacc2204accc5945;hp=532e2ffcbb3914fd2d7e81dafab0f784e0b52daf;hb=7a41f6dcc1339a4a2dda2207b6b051f20c09a239;hpb=6ff7aea73057e4a650d8b0ac659d9bba05ba02e2 diff --git a/source/glsl/finalize.cpp b/source/glsl/finalize.cpp index 532e2ffc..55f7b82e 100644 --- a/source/glsl/finalize.cpp +++ b/source/glsl/finalize.cpp @@ -253,29 +253,30 @@ bool LegacyConverter::supports_sample_sampling() const void LegacyConverter::visit(VariableDeclaration &var) { - if(var.layout && !supports_interface_layouts()) + if(var.layout) { - vector::iterator i; - for(i=var.layout->qualifiers.begin(); (i!=var.layout->qualifiers.end() && i->name!="location"); ++i) ; - if(i!=var.layout->qualifiers.end()) + for(vector::const_iterator i=var.layout->qualifiers.begin(); i!=var.layout->qualifiers.end(); ) { - if(stage->type==Stage::VERTEX && var.interface=="in") + if(i->name=="location" && !supports_interface_layouts()) { - stage->locations[var.name] = i->value; - var.layout->qualifiers.erase(i); - } - else if(stage->type==Stage::FRAGMENT && var.interface=="out") - { - if(check_extension(&Features::ext_gpu_shader4)) + if(stage->type==Stage::VERTEX && var.interface=="in") stage->locations[var.name] = i->value; - else if(i->value!=0) - unsupported("EXT_gpu_shader4 required for multiple fragment shader outputs"); - var.layout->qualifiers.erase(i); - } + else if(stage->type==Stage::FRAGMENT && var.interface=="out") + { + if(check_extension(&Features::ext_gpu_shader4)) + stage->locations[var.name] = i->value; + else if(i->value!=0) + unsupported("EXT_gpu_shader4 required for multiple fragment shader outputs"); + } - if(var.layout->qualifiers.empty()) - var.layout = 0; + i = var.layout->qualifiers.erase(i); + } + else + ++i; } + + if(var.layout->qualifiers.empty()) + var.layout = 0; } if(var.sampling=="centroid")