]> git.tdb.fi Git - libs/gl.git/blobdiff - source/programparser.cpp
Support layout declarations on variables
[libs/gl.git] / source / programparser.cpp
index ddea96409dea4475e911e94fac01fda171451b57..596ed0456b8e789ec2bd5ac636790a7d97bc8c4c 100644 (file)
@@ -335,7 +335,24 @@ Node *ProgramParser::parse_global_declaration()
        if(token=="import")
                return parse_import();
        else if(token=="layout")
-               return parse_layout();
+       {
+               RefPtr<Layout> layout = parse_layout();
+               token = peek_token();
+               if(is_interface_qualifier(token) && peek_token(1)==";")
+               {
+                       RefPtr<InterfaceLayout> iface_lo = new InterfaceLayout;
+                       iface_lo->layout.qualifiers = layout->qualifiers;
+                       iface_lo->interface = parse_token();
+                       expect(";");
+                       return iface_lo.release();
+               }
+               else
+               {
+                       VariableDeclaration *var = parse_variable_declaration();
+                       var->layout = layout.release();
+                       return var;
+               }
+       }
        else if(token=="struct")
                return parse_struct_declaration();
        else if(is_sampling_qualifier(token) || token=="const")
@@ -421,8 +438,6 @@ Layout *ProgramParser::parse_layout()
                expect(",");
        }
        expect(")");
-       layout->interface = parse_token();
-       expect(";");
 
        return layout.release();
 }