]> git.tdb.fi Git - libs/gl.git/blobdiff - source/glsl/finalize.cpp
Add a utility function for following a chain of base types
[libs/gl.git] / source / glsl / finalize.cpp
index 864a128b9230543913a629ff25e4b031af4981aa..3bdca5cb7d02dcbf786e69dd60d9f0b3b394d554 100644 (file)
@@ -210,10 +210,8 @@ void LocationAllocator::visit(VariableDeclaration &var)
 
        if(var.interface=="uniform")
        {
-               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) && !visit_uniform(var.name, var.layout))
+               const TypeDeclaration *base_type = get_ultimate_base_type(var.type_declaration);
+               if(dynamic_cast<const ImageTypeDeclaration *>(base_type) && !visit_uniform(var.name, var.layout))
                        unbound_textures.push_back(&var);
        }
 }
@@ -659,10 +657,7 @@ void QualifierConverter::visit(VariableDeclaration &var)
                        }
                        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))
+                               if(dynamic_cast<const ImageTypeDeclaration *>(get_ultimate_base_type(var.type_declaration)))
                                        stage->texture_bindings[var.name] = i->value;
 
                                i = var.layout->qualifiers.erase(i);