X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=blobdiff_plain;f=source%2Fcore%2Freflectdata.cpp;h=c4c24f7bb21656750edcbd77c693de737ba52360;hp=db6798730cd4c9c9097e86735beeabed8e8114c3;hb=HEAD;hpb=38712d8ecc57d043a2419ffbaeeb57f7a6586f14 diff --git a/source/core/reflectdata.cpp b/source/core/reflectdata.cpp index db679873..c4c24f7b 100644 --- a/source/core/reflectdata.cpp +++ b/source/core/reflectdata.cpp @@ -10,10 +10,22 @@ namespace GL { 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); } @@ -24,10 +36,14 @@ void ReflectData::UniformBlockInfo::sort_uniforms() 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