]> git.tdb.fi Git - libs/gl.git/blobdiff - source/glsl/output.cpp
Check the flat qualifier from the correct member
[libs/gl.git] / source / glsl / output.cpp
index c2c54f9ff33834d11d681a0e80e976aa75747b39..d28de156c5a881fede9fb116052370102338c80a 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)
@@ -200,7 +194,7 @@ void Formatter::visit(TernaryExpression &ternary)
        visit_expression(*ternary.condition, ternary.oper, false);
        append(ternary.oper->token);
        visit_expression(*ternary.true_expr, ternary.oper, false);
-       if(ternary.oper->token2)
+       if(ternary.oper->token2[0])
                append(ternary.oper->token2);
        visit_expression(*ternary.false_expr, ternary.oper, true);
 }
@@ -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,25 @@ 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(const ImageTypeDeclaration *image = dynamic_cast<const ImageTypeDeclaration *>(var.type_declaration))
+                       if(image->base_image)
+                               type_name = image->base_image->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 +319,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));