source_line(1),
indent(0),
parameter_list(false),
- omit_builtin(false)
+ omit_builtin(false),
+ r_empty_name(false)
{ }
-const string &Formatter::apply(Stage &s)
+string Formatter::apply(Stage &s)
{
stage = &s;
omit_builtin = true;
formatted += '\n';
}
+ if(s.required_features.arb_enhanced_layouts)
+ append("#extension GL_ARB_enhanced_layouts: require\n");
if(s.required_features.arb_explicit_attrib_location)
- append("#extension arb_explicit_attrib_location: require\n");
+ append("#extension GL_ARB_explicit_attrib_location: require\n");
+ if(s.required_features.arb_explicit_uniform_location)
+ append("#extension GL_ARB_explicit_uniform_location: require\n");
if(s.required_features.arb_gpu_shader5)
- append("#extension arb_gpu_shader5: require\n");
+ append("#extension GL_ARB_gpu_shader5: require\n");
+ if(s.required_features.arb_separate_shader_objects)
+ append("#extension GL_ARB_separate_shader_objects: require\n");
if(s.required_features.arb_uniform_buffer_object)
- append("#extension arb_uniform_buffer_object: require\n");
+ append("#extension GL_ARB_uniform_buffer_object: require\n");
if(s.required_features.ext_gpu_shader4)
- append("#extension ext_gpu_shader4: require\n");
+ append("#extension GL_EXT_gpu_shader4: require\n");
if(s.required_features.ext_texture_array)
- append("#extension ext_texture_array: require\n");
+ append("#extension GL_EXT_texture_array: require\n");
formatted += '\n';
s.content.visit(*this);
append(literal.token);
}
-void Formatter::visit(ParenthesizedExpression &parexpr)
-{
- append('(');
- parexpr.expression->visit(*this);
- append(')');
-}
-
void Formatter::visit(VariableReference &var)
{
append(var.name);
+ r_empty_name = false;
}
void Formatter::visit(InterfaceBlockReference &iface)
{
- append(iface.name);
+ r_empty_name = iface.declaration->instance_name.empty();
+ if(!r_empty_name)
+ append(iface.declaration->instance_name);
}
void Formatter::visit(MemberAccess &memacc)
{
visit_expression(*memacc.left, memacc.oper, false);
- append(format(".%s", memacc.member));
+ if(!r_empty_name)
+ append('.');
+ append(memacc.member);
}
void Formatter::visit(Swizzle &swizzle)
void Formatter::visit(InterfaceBlock &iface)
{
- append(format("%s %s\n", iface.interface, iface.name));
+ 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())