X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fcore%2Fprogram.cpp;h=22626c6543674118737df4e1272785f1db6f9a12;hb=6f39983060a27634c012f66c82fea0d09fea9774;hp=5b357f3966021dc546807aa99def9a855a9f9a99;hpb=3f5e469de3454aee1d1923045fc713329a32cc18;p=libs%2Fgl.git diff --git a/source/core/program.cpp b/source/core/program.cpp index 5b357f39..22626c65 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); @@ -552,6 +555,7 @@ void Program::collect_uniforms() block.uniforms.push_back(&uni); uni.block = █ } + sort(block.uniforms, uniform_location_compare); block.layout_hash = compute_layout_hash(block.uniforms); } @@ -680,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::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); @@ -723,7 +733,8 @@ Program::UniformInfo::UniformInfo(): array_size(0), array_stride(0), matrix_stride(0), - type(VOID) + type(VOID), + binding(-1) { }