]> git.tdb.fi Git - libs/gl.git/blobdiff - source/glsl/output.cpp
Transform interface block contents into structs
[libs/gl.git] / source / glsl / output.cpp
index 72af837958e77a712196b97cc9279258e8c08555..52371d1bfdd79f9f7de91ff457d10001952f6c62 100644 (file)
@@ -94,7 +94,7 @@ void Formatter::visit(Block &block)
        bool first = true;
        for(NodeList<Statement>::iterator i=block.body.begin(); i!=block.body.end(); ++i)
        {
-               if((*i)->source==BUILTIN_SOURCE)
+               if((*i)->source<=BUILTIN_SOURCE)
                        continue;
                if(!first)
                        append('\n');
@@ -229,7 +229,7 @@ void Formatter::visit(VariableDeclaration &var)
                append(format("%s ", var.interpolation));
        if(!var.sampling.empty())
                append(format("%s ", var.sampling));
-       if(!var.interface.empty() && var.interface!=block_interface)
+       if(!var.interface.empty())
        {
                string interface = var.interface;
                if(mode==Compiler::PROGRAM && stage && stage->required_features.glsl_version<Version(1, 30))
@@ -243,7 +243,10 @@ void Formatter::visit(VariableDeclaration &var)
        }
        if(!var.precision.empty())
                append(format("%s ", var.precision));
-       append(format("%s %s", var.type, var.name));
+       string type_name = var.type_declaration->name;
+       if(var.array)
+               type_name = type_name.substr(0, type_name.find('['));
+       append(format("%s %s", type_name, var.name));
        if(var.array)
        {
                append('[');
@@ -262,9 +265,9 @@ void Formatter::visit(VariableDeclaration &var)
 
 void Formatter::visit(InterfaceBlock &iface)
 {
-       SetForScope<string> set(block_interface, iface.interface);
        append(format("%s %s\n", iface.interface, iface.name));
-       iface.members.visit(*this);
+       if(iface.struct_declaration)
+               iface.struct_declaration->members.visit(*this);
        if(!iface.instance_name.empty())
        {
                append(' ');
@@ -277,7 +280,7 @@ void Formatter::visit(InterfaceBlock &iface)
 
 void Formatter::visit(FunctionDeclaration &func)
 {
-       append(format("%s %s(", func.return_type, func.name));
+       append(format("%s %s(", func.return_type_declaration->name, func.name));
        for(NodeArray<VariableDeclaration>::iterator i=func.parameters.begin(); i!=func.parameters.end(); ++i)
        {
                if(i!=func.parameters.begin())