]> git.tdb.fi Git - libs/gl.git/blobdiff - source/glsl/output.cpp
Unify handling of variables and interface blocks in the GLSL compiler
[libs/gl.git] / source / glsl / output.cpp
index 6b76167468b73d52b16d67e78995dc0961c6c62d..07da64e3ba565cdca64a8bb9f58b5d34f11c11eb 100644 (file)
@@ -144,15 +144,9 @@ void Formatter::visit(Literal &literal)
 
 void Formatter::visit(VariableReference &var)
 {
-       append(var.name);
-       r_empty_name = false;
-}
-
-void Formatter::visit(InterfaceBlockReference &iface)
-{
-       r_empty_name = iface.declaration->instance_name.empty();
+       r_empty_name = var.name.find(' ')!=string::npos;
        if(!r_empty_name)
-               append(iface.declaration->instance_name);
+               append(var.name);
 }
 
 void Formatter::visit(MemberAccess &memacc)
@@ -255,6 +249,9 @@ void Formatter::visit(InterfaceLayout &layout)
 
 void Formatter::visit(StructDeclaration &strct)
 {
+       if(!strct.block_name.empty())
+               return;
+
        append(format("struct %s\n", strct.name));
        strct.members.visit(*this);
        append(';');
@@ -287,10 +284,22 @@ void Formatter::visit(VariableDeclaration &var)
        }
        if(!var.precision.empty())
                append(format("%s ", var.precision));
-       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.block_declaration)
+       {
+               append(format("%s\n", var.block_declaration->block_name));
+               var.block_declaration->members.visit(*this);
+               if(var.name.find(' ')==string::npos)
+                       append(format(" %s", var.name));
+       }
+       else
+       {
+               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('[');
@@ -307,26 +316,6 @@ void Formatter::visit(VariableDeclaration &var)
                append(';');
 }
 
-void Formatter::visit(InterfaceBlock &iface)
-{
-       if(iface.layout)
-       {
-               iface.layout->visit(*this);
-               append(' ');
-       }
-       append(format("%s %s\n", iface.interface, iface.block_name));
-       if(iface.struct_declaration)
-               iface.struct_declaration->members.visit(*this);
-       if(!iface.instance_name.empty())
-       {
-               append(' ');
-               append(iface.instance_name);
-               if(iface.array)
-                       append("[]");
-       }
-       append(';');
-}
-
 void Formatter::visit(FunctionDeclaration &func)
 {
        append(format("%s %s(", func.return_type_declaration->name, func.name));