X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fglsl%2Fgenerate.cpp;fp=source%2Fglsl%2Fgenerate.cpp;h=f345670b0451d462f0b1083eb047b605e4a006bb;hb=d9d7ab44d5f88c4537906e77c49db06d6bdc099c;hp=13fb72c53039bfbd7e9fed3779bc718bdc6801d7;hpb=6c5380021ff5c42f750e75c0880882b77476b8c4;p=libs%2Fgl.git diff --git a/source/glsl/generate.cpp b/source/glsl/generate.cpp index 13fb72c5..f345670b 100644 --- a/source/glsl/generate.cpp +++ b/source/glsl/generate.cpp @@ -8,55 +8,23 @@ namespace Msp { namespace GL { namespace SL { -ConstantSpecializer::ConstantSpecializer(): - values(0) -{ } - -void ConstantSpecializer::apply(Stage &stage, const map *v) +void ConstantIdAssigner::apply(Stage &stage) { - values = v; stage.content.visit(*this); } -void ConstantSpecializer::visit(VariableDeclaration &var) +void ConstantIdAssigner::visit(VariableDeclaration &var) { - bool specializable = false; if(var.layout) { vector &qualifiers = var.layout->qualifiers; for(vector::iterator i=qualifiers.begin(); i!=qualifiers.end(); ++i) - if(i->name=="constant_id") + if(i->name=="constant_id" && i->has_value) { - specializable = true; - if(values) - qualifiers.erase(i); - else if(i->value==-1) + if(i->value==-1) i->value = hash32(var.name)&0x7FFFFFFF; break; } - - if(qualifiers.empty()) - var.layout = 0; - } - - if(specializable && values) - { - map::const_iterator i = values->find(var.name); - if(i!=values->end()) - { - RefPtr literal = new Literal; - if(var.type=="bool") - { - literal->token = (i->second ? "true" : "false"); - literal->value = static_cast(i->second); - } - else if(var.type=="int") - { - literal->token = lexical_cast(i->second); - literal->value = i->second; - } - var.init_expression = literal; - } } }