]> git.tdb.fi Git - libs/gl.git/blobdiff - source/glsl/generate.cpp
Split up ComponentSpecializer
[libs/gl.git] / source / glsl / generate.cpp
index 13fb72c53039bfbd7e9fed3779bc718bdc6801d7..f345670b0451d462f0b1083eb047b605e4a006bb 100644 (file)
@@ -8,55 +8,23 @@ namespace Msp {
 namespace GL {
 namespace SL {
 
-ConstantSpecializer::ConstantSpecializer():
-       values(0)
-{ }
-
-void ConstantSpecializer::apply(Stage &stage, const map<string, int> *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<Layout::Qualifier> &qualifiers = var.layout->qualifiers;
                for(vector<Layout::Qualifier>::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<string, int>::const_iterator i = values->find(var.name);
-               if(i!=values->end())
-               {
-                       RefPtr<Literal> literal = new Literal;
-                       if(var.type=="bool")
-                       {
-                               literal->token = (i->second ? "true" : "false");
-                               literal->value = static_cast<bool>(i->second);
-                       }
-                       else if(var.type=="int")
-                       {
-                               literal->token = lexical_cast<string>(i->second);
-                               literal->value = i->second;
-                       }
-                       var.init_expression = literal;
-               }
        }
 }