-void Program::update_layout_hash()
-{
- string layout_descriptor;
- for(const UniformBlockInfo &b: uniform_blocks)
- layout_descriptor += format("%d:%x\n", b.bind_point, b.layout_hash);
- uniform_layout_hash = hash32(layout_descriptor);
-}
-
-Program::LayoutHash Program::compute_layout_hash(const vector<const UniformInfo *> &uniforms)
-{
- string layout_descriptor;
- for(const UniformInfo *u: uniforms)
- layout_descriptor += format("%d:%s:%x:%d\n", u->location, u->name, u->type, u->array_size);
- return hash32(layout_descriptor);
-}
-
-bool Program::uniform_location_compare(const UniformInfo *uni1, const UniformInfo *uni2)
-{
- return uni1->location<uni2->location;
-}
-
-const Program::UniformBlockInfo &Program::get_uniform_block_info(const string &name) const