# HG changeset patch # User John Tsiombikas # Date 1361764689 -7200 # Node ID f561282b13e86f165b4419ec10ae04bcf7243282 # Parent 69654793abc31356cace0316a2cb0a33e224d9c4 backported the fixes from calacirya diff -r 69654793abc3 -r f561282b13e8 src/anim.c --- a/src/anim.c Sun Sep 23 08:23:15 2012 +0300 +++ b/src/anim.c Mon Feb 25 05:58:09 2013 +0200 @@ -325,6 +325,7 @@ pthread_mutex_unlock(&node->cache_list_lock); cache->time = ANM_TIME_INVAL; + cache->inv_time = ANM_TIME_INVAL; pthread_setspecific(node->cache_key, cache); } @@ -348,7 +349,7 @@ m4_translate(tmat, pos.x, pos.y, pos.z); quat_to_mat4(rmat, rot); - m4_translate(smat, scale.x, scale.y, scale.z); + m4_scale(smat, scale.x, scale.y, scale.z); /* ok this would look nicer in C++ */ m4_mult(cache->matrix, pivmat, tmat); @@ -380,6 +381,7 @@ pthread_mutex_unlock(&node->cache_list_lock); cache->inv_time = ANM_TIME_INVAL; + cache->inv_time = ANM_TIME_INVAL; pthread_setspecific(node->cache_key, cache); } diff -r 69654793abc3 -r f561282b13e8 src/track.c --- a/src/track.c Sun Sep 23 08:23:15 2012 +0300 +++ b/src/track.c Mon Feb 25 05:58:09 2013 +0200 @@ -67,6 +67,27 @@ free(track); } +void anm_copy_track(struct anm_track *dest, struct anm_track *src) +{ + free(dest->name); + if(dest->keys) { + dynarr_free(dest->keys); + } + + if(src->name) { + dest->name = malloc(strlen(src->name) + 1); + strcpy(dest->name, src->name); + } + + dest->count = src->count; + dest->keys = dynarr_alloc(src->count, sizeof *dest->keys); + memcpy(dest->keys, src->keys, src->count * sizeof *dest->keys); + + dest->def_val = src->def_val; + dest->interp = src->interp; + dest->extrap = src->extrap; +} + int anm_set_track_name(struct anm_track *track, const char *name) { char *tmp; diff -r 69654793abc3 -r f561282b13e8 src/track.h --- a/src/track.h Sun Sep 23 08:23:15 2012 +0300 +++ b/src/track.h Mon Feb 25 05:58:09 2013 +0200 @@ -55,6 +55,11 @@ struct anm_track *anm_create_track(void); void anm_free_track(struct anm_track *track); +/* copies track src to dest + * XXX: dest must have been initialized first + */ +void anm_copy_track(struct anm_track *dest, struct anm_track *src); + int anm_set_track_name(struct anm_track *track, const char *name); const char *anm_get_track_name(struct anm_track *track);