void ReflectData::update_layout_hash()
{
- string layout_descriptor;
+ layout_hash = hash<32>(uniform_blocks.size());
for(const UniformBlockInfo &b: uniform_blocks)
- layout_descriptor += format("%d:%x\n", b.bind_point, b.layout_hash);
- layout_hash = hash32(layout_descriptor);
+ {
+ layout_hash = hash_update<32>(layout_hash, b.bind_point);
+ layout_hash = hash_update<32>(layout_hash, b.layout_hash);
+ }
+}
+
+void ReflectData::update_used_bindings()
+{
+ for(const UniformInfo &u: uniforms)
+ if(u.binding>=0 && is_image(u.type))
+ used_bindings.push_back(u.binding|TEXTURE_BINDING);
+ for(const UniformBlockInfo &b: uniform_blocks)
+ used_bindings.push_back(b.bind_point|UNIFORM_BLOCK_BINDING);
+ sort(used_bindings);
}
void ReflectData::UniformBlockInfo::update_layout_hash()
{
- string layout_descriptor;
+ layout_hash = hash<32>(uniforms.size());
for(const UniformInfo *u: uniforms)
- layout_descriptor += format("%d:%s:%x:%d\n", u->location, u->name, u->type, u->array_size);
- layout_hash = hash32(layout_descriptor);
+ {
+ layout_hash = hash_update<32>(layout_hash, u->location);
+ layout_hash = hash_update<32>(layout_hash, u->name);
+ layout_hash = hash_update<32>(layout_hash, u->type);
+ layout_hash = hash_update<32>(layout_hash, u->array_size);
+ }
}
} // namespace GL