X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fglsl%2Foutput.cpp;h=50b60c1411d34a67ec5aae4d20a7b5dab233a881;hb=59347f76bc985e8c9c769d4a3eee672cba9c920b;hp=928b42508792ce47398e2955b050d5cdd2f5b37c;hpb=c315e77b7791fe92d42e1566b5adaddf2699a758;p=libs%2Fgl.git diff --git a/source/glsl/output.cpp b/source/glsl/output.cpp index 928b4250..50b60c14 100644 --- a/source/glsl/output.cpp +++ b/source/glsl/output.cpp @@ -14,10 +14,11 @@ Formatter::Formatter(): 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; @@ -32,16 +33,22 @@ const string &Formatter::apply(Stage &s) 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); @@ -148,17 +155,23 @@ void Formatter::visit(Literal &literal) 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); + r_empty_name = false; } void Formatter::visit(Swizzle &swizzle)