X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fglsl%2Fgenerate.cpp;h=c82d1c6c58e4a59ef025fa3cf3f13c80b580342c;hb=3fe1aab63922eec99d8bf6fd4fd60bec10df173c;hp=a17f7fb502a9e751eb17fe92f4b5d8c2ea383add;hpb=e9a898f315b5d1396f196d785913a283c30940f2;p=libs%2Fgl.git diff --git a/source/glsl/generate.cpp b/source/glsl/generate.cpp index a17f7fb5..c82d1c6c 100644 --- a/source/glsl/generate.cpp +++ b/source/glsl/generate.cpp @@ -16,9 +16,16 @@ void ConstantIdAssigner::apply(Module &module, const Features &features) for(VariableDeclaration *v: auto_constants) { - unsigned id = hash32(v->name)%features.constant_id_range; - while(used_ids.count(id)) - id = (id+1)%features.constant_id_range; + unsigned id; + auto j = existing_constants.find(v->name); + if(j!=existing_constants.end()) + id = j->second; + else + { + id = hash32(v->name)%features.constant_id_range; + while(used_ids.count(id)) + id = (id+1)%features.constant_id_range; + } auto i = find_member(v->layout->qualifiers, string("constant_id"), &Layout::Qualifier::name); if(i!=v->layout->qualifiers.end()) @@ -38,19 +45,15 @@ void ConstantIdAssigner::visit(VariableDeclaration &var) if(i->value==-1) auto_constants.push_back(&var); else + { + existing_constants[var.name] = i->value; used_ids.insert(i->value); + } } } } -InterfaceGenerator::InterfaceGenerator(): - stage(0), - function_scope(false), - copy_block(false), - iface_target_block(0) -{ } - string InterfaceGenerator::get_out_prefix(Stage::Type type) { if(type==Stage::VERTEX)