X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=blobdiff_plain;f=source%2Fglsl%2Foutput.cpp;h=07da64e3ba565cdca64a8bb9f58b5d34f11c11eb;hp=6b76167468b73d52b16d67e78995dc0961c6c62d;hb=03b2ea5c9c611cfa5f02afb49ed7e05743e691b4;hpb=4ecc965177df174ed2d26cfedf24665c8879acda diff --git a/source/glsl/output.cpp b/source/glsl/output.cpp index 6b761674..07da64e3 100644 --- a/source/glsl/output.cpp +++ b/source/glsl/output.cpp @@ -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));