X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fcore%2Fprogram.cpp;h=9b5400a38122073af034eb05a17cdef434ad5820;hb=ca174bb730e3484cc9572013186d83bbc39bac99;hp=0d8e6bd1e2ae09bfbe509c8b07e9bfd42d145219;hpb=ed511d9fd320f5db6654a042db8b6b568c4314cc;p=libs%2Fgl.git diff --git a/source/core/program.cpp b/source/core/program.cpp index 0d8e6bd1..9b5400a3 100644 --- a/source/core/program.cpp +++ b/source/core/program.cpp @@ -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); @@ -534,6 +537,7 @@ void Program::collect_uniforms() info.name = i->name; info.tag = i->name; info.location = i->location; + info.binding = i->binding; info.array_size = i->array_size; info.type = i->type; } @@ -681,6 +685,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::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::const_iterator i = lower_bound_member(attributes, name, &AttributeInfo::name); @@ -724,7 +734,8 @@ Program::UniformInfo::UniformInfo(): array_size(0), array_stride(0), matrix_stride(0), - type(VOID) + type(VOID), + binding(-1) { }