static void _evas_gl_common_shader_binary_hash(Evas_GL_Shared *shared) { if (shared->shaders_checksum) return; /* This hash makes it sure that if the shaders code changes, then we * will not reuse the old binaries. */ shared->shaders_checksum = eina_stringshare_printf ("%#x:%#x", eina_hash_superfast(fragment_glsl, strlen(fragment_glsl)), eina_hash_superfast(vertex_glsl, strlen(vertex_glsl))); }
//FIXME proper hash calculation Tilehash tile_hash_calc(Filter *f, Rect *area) { Tilehash h; char buf[1024]; int len; h.filterhash = filter_hash_get(f); len = sprintf(buf, "%d%d%d%d%d%dtail", h.filterhash->hash, area->corner.x, area->corner.y, area->width, area->height, area->corner.scale); h.tilehash = eina_hash_superfast(buf, len); h.area = *area; return h; }
void filter_hash_recalc(Filter *f) { Filter *next; int i; int len; len = snprintf(f->hash.data, 1020, "%u%s", f->hash.prevhash, f->fc->shortname); if (len >= 1020) abort(); for(i=0;i<ea_count(f->settings);i++) { len += mt_data_snprint(&f->hash.data[len], 1024-len, ((Meta*)ea_data(f->settings, i))->type, ((Meta*)ea_data(f->settings, i))->data); if (len >= 1020) abort(); } for(i=0;i<ea_count(f->tune);i++) { if (!((Meta*)ea_data(f->tune, i))->data) { printf("FIXME! no data for tune %d (%s) in %s\n", i, ((Meta*)ea_data(f->tune, i))->name, f->fc->shortname); continue; } //assert(((Meta*)ea_data(f->tune, i))->data); len += mt_data_snprint(&f->hash.data[len], 1024-len, ((Meta*)ea_data(f->tune, i))->type, ((Meta*)ea_data(f->tune, i))->data); if (len >= 1020) abort(); } len += snprintf(&f->hash.data[len], 1024-len, "tail"); f->hash.len = len; f->hash.hash = eina_hash_superfast(f->hash.data, len); if (f->node->con_trees_out && ea_count(f->node->con_trees_out)) { assert(ea_count(f->node->con_trees_out) == 1); next = ((Con *)ea_data(f->node->con_trees_out, 0))->sink->filter; next->hash.prevhash = f->hash.hash; filter_hash_recalc(next); } }