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)
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);