]> git.tdb.fi Git - libs/gl.git/blobdiff - source/glsl/finalize.cpp
Add legacy conversion for binding layout qualifiers
[libs/gl.git] / source / glsl / finalize.cpp
index 0805a29e830eb45d626970a80faa1d10ae072c3b..1b300e72a872cd55aa19727cf284efba5607b26f 100644 (file)
@@ -382,6 +382,14 @@ bool LegacyConverter::supports_uniform_location() const
                return check_extension(&Features::arb_explicit_uniform_location);
 }
 
+bool LegacyConverter::supports_binding() const
+{
+       if(features.gl_api==OPENGL_ES2)
+               return check_version(Version(3, 10));
+       else
+               return check_version(Version(4, 20));
+}
+
 void LegacyConverter::visit(VariableDeclaration &var)
 {
        if(var.layout)
@@ -420,6 +428,16 @@ void LegacyConverter::visit(VariableDeclaration &var)
                                else
                                        ++i;
                        }
+                       else if(i->name=="binding" && !supports_binding())
+                       {
+                               const TypeDeclaration *type = var.type_declaration;
+                               while(const BasicTypeDeclaration *basic = dynamic_cast<const BasicTypeDeclaration *>(type))
+                                       type = basic->base_type;
+                               if(dynamic_cast<const ImageTypeDeclaration *>(type))
+                                       stage->texture_bindings[var.name] = i->value;
+
+                               i = var.layout->qualifiers.erase(i);
+                       }
                        else
                                ++i;
                }
@@ -486,6 +504,11 @@ void LegacyConverter::visit(InterfaceBlock &iface)
                {
                        if(i->name=="location" && !supports_interface_block_location())
                                i = iface.layout->qualifiers.erase(i);
+                       else if(i->name=="binding" && !supports_binding())
+                       {
+                               stage->uniform_block_bindings[iface.block_name] = i->value;
+                               i = iface.layout->qualifiers.erase(i);
+                       }
                        else
                                ++i;
                }