]> git.tdb.fi Git - libs/gl.git/blobdiff - source/core/program.cpp
Overhaul texture management in rendering classes
[libs/gl.git] / source / core / program.cpp
index 0d8e6bd1e2ae09bfbe509c8b07e9bfd42d145219..22626c6543674118737df4e1272785f1db6f9a12 100644 (file)
@@ -400,6 +400,9 @@ void Program::query_uniforms()
                        i->location = glGetUniformLocation(id, i->name.c_str());
                        i->block = &default_block;
                        default_block.uniforms.push_back(&*i);
+
+                       if(is_image(i->type) && i->location>=0)
+                               glGetUniformiv(id, i->location, &i->binding);
                }
 
        default_block.layout_hash = compute_layout_hash(default_block.uniforms);
@@ -681,6 +684,12 @@ int Program::get_uniform_location(Tag tag) const
        return i!=uniforms.end() && i->tag==tag && i->block->bind_point<0 ? i->location : -1;
 }
 
+int Program::get_uniform_binding(Tag tag) const
+{
+       vector<UniformInfo>::const_iterator i = lower_bound_member(uniforms, tag, &UniformInfo::tag);
+       return i!=uniforms.end() && i->tag==tag ? i->binding : -1;
+}
+
 const Program::AttributeInfo &Program::get_attribute_info(const string &name) const
 {
        vector<AttributeInfo>::const_iterator i = lower_bound_member(attributes, name, &AttributeInfo::name);
@@ -724,7 +733,8 @@ Program::UniformInfo::UniformInfo():
        array_size(0),
        array_stride(0),
        matrix_stride(0),
-       type(VOID)
+       type(VOID),
+       binding(-1)
 { }