# HG changeset patch # User John Tsiombikas # Date 1361764689 -7200 # Node ID 529036ffe7a5317a5dc5f44c3e3a2f804ab53992 # Parent d5f855fb3097308fd0712398d08b5772a402cb51 backported the fixes from calacirya diff -r d5f855fb3097 -r 529036ffe7a5 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 d5f855fb3097 -r 529036ffe7a5 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 d5f855fb3097 -r 529036ffe7a5 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);