X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fcore%2Fprogram.cpp;fp=source%2Fcore%2Fprogram.cpp;h=533dca610c9585f649420edadd34bf4f5e858617;hb=58c5647c775e38dd08a64ad435dfe0673a62fcd1;hp=471803c5b4ab0edfefcfe9253dafd42cca95f0a5;hpb=02cc42fc113bcc17a28ff9d93a9e4b3f26fbb91f;p=libs%2Fgl.git diff --git a/source/core/program.cpp b/source/core/program.cpp index 471803c5..533dca61 100644 --- a/source/core/program.cpp +++ b/source/core/program.cpp @@ -63,6 +63,13 @@ void Program::add_stages(const Module &mod, const map &spec_values) finalize_uniforms(); + for(const ReflectData::UniformInfo &u: reflect_data.uniforms) + if(u.binding>=0) + reflect_data.used_bindings.push_back(u.binding); + for(const ReflectData::UniformBlockInfo &b: reflect_data.uniform_blocks) + reflect_data.used_bindings.push_back(b.bind_point); + sort(reflect_data.used_bindings); + for(const ReflectData::UniformInfo &u: reflect_data.uniforms) require_type(u.type); for(const ReflectData::AttributeInfo &a: reflect_data.attributes) @@ -252,6 +259,12 @@ int Program::get_uniform_binding(Tag tag) const return i!=reflect_data.uniforms.end() && i->tag==tag ? i->binding : -1; } +bool Program::uses_binding(int binding) const +{ + auto i = lower_bound(reflect_data.used_bindings, binding); + return i!=reflect_data.used_bindings.end() && *i==binding; +} + const ReflectData::AttributeInfo &Program::get_attribute_info(const string &name) const { auto i = lower_bound_member(reflect_data.attributes, name, &ReflectData::AttributeInfo::name);