if(!var.sampling.empty())
formatted += format("%s ", var.sampling);
if(!var.interface.empty() && var.interface!=block_interface)
- formatted += format("%s ", var.interface);
+ {
+ string interface = var.interface;
+ if(stage->required_version<Version(1, 30))
+ {
+ if(stage->type==VERTEX && var.interface=="in")
+ interface = "attribute";
+ else if((stage->type==VERTEX && var.interface=="out") || (stage->type==FRAGMENT && var.interface=="in"))
+ interface = "varying";
+ }
+ formatted += format("%s ", interface);
+ }
formatted += format("%s %s", var.type, var.name);
if(var.array)
{
ProgramCompiler::LegacyConverter::LegacyConverter():
- target_version(get_glsl_version())
+ target_version(get_glsl_version()),
+ frag_out(0)
{ }
ProgramCompiler::LegacyConverter::LegacyConverter(const Version &v):
- target_version(v)
+ target_version(v),
+ frag_out(0)
{ }
bool ProgramCompiler::LegacyConverter::check_version(const Version &feature_version)
void ProgramCompiler::LegacyConverter::visit(VariableReference &var)
{
- if(var.name==frag_out_name && !check_version(Version(1, 30)))
+ if(var.declaration==frag_out && !check_version(Version(1, 30)))
{
var.name = "gl_FragColor";
var.declaration = 0;
type = string();
}
+void ProgramCompiler::LegacyConverter::visit(Assignment &assign)
+{
+ TraversingVisitor::visit(assign);
+ if(assign.target_declaration==frag_out && !check_version(Version(1, 30)))
+ assign.target_declaration = 0;
+}
+
void ProgramCompiler::LegacyConverter::visit(FunctionCall &call)
{
if(call.name=="texture" && !call.declaration && !check_version(Version(1, 30)))
if((var.interface=="in" || var.interface=="out") && !check_version(Version(1, 30)))
{
- if(stage->type==VERTEX && var.interface=="in")
- var.interface = "attribute";
- else if((stage->type==VERTEX && var.interface=="out") || (stage->type==FRAGMENT && var.interface=="in"))
- var.interface = "varying";
- else if(stage->type==FRAGMENT && var.interface=="out")
+ if(stage->type==FRAGMENT && var.interface=="out")
{
- frag_out_name = var.name;
+ frag_out = &var;
remove_node = true;
}
}