From fed76c80c6c2d114f7cce78124f9f336488d69d6 Mon Sep 17 00:00:00 2001 From: Mario Zechner Date: Wed, 6 Sep 2023 11:07:17 +0200 Subject: [PATCH] [c] Additional #2325 work, precalculate the space needed for property IDs in animations --- spine-c/spine-c/src/spine/Animation.c | 28 +++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/spine-c/spine-c/src/spine/Animation.c b/spine-c/spine-c/src/spine/Animation.c index a0c105fde..a1d02831c 100644 --- a/spine-c/spine-c/src/spine/Animation.c +++ b/spine-c/spine-c/src/spine/Animation.c @@ -37,18 +37,22 @@ _SP_ARRAY_IMPLEMENT_TYPE(spPropertyIdArray, spPropertyId) _SP_ARRAY_IMPLEMENT_TYPE(spTimelineArray, spTimeline *) spAnimation *spAnimation_create(const char *name, spTimelineArray *timelines, float duration) { - int i, n; - spAnimation *self = NEW(spAnimation); - MALLOC_STR(self->name, name); - self->timelines = timelines != NULL ? timelines : spTimelineArray_create(1); - timelines = self->timelines; - self->timelineIds = spPropertyIdArray_create(16); - for (i = 0, n = timelines->size; i < n; i++) { - spPropertyIdArray_addAllValues(self->timelineIds, timelines->items[i]->propertyIds, 0, - timelines->items[i]->propertyIdsCount); - } - self->duration = duration; - return self; + int i, n, totalCount = 0; + spAnimation *self = NEW(spAnimation); + MALLOC_STR(self->name, name); + self->timelines = timelines != NULL ? timelines : spTimelineArray_create(1); + timelines = self->timelines; + + for (i = 0, n = timelines->size; i < n; i++) + totalCount += timelines->items[i]->propertyIdsCount; + self->timelineIds = spPropertyIdArray_create(totalCount); + + for (i = 0, n = timelines->size; i < n; i++) { + spPropertyIdArray_addAllValues(self->timelineIds, timelines->items[i]->propertyIds, 0, + timelines->items[i]->propertyIdsCount); + } + self->duration = duration; + return self; } void spAnimation_dispose(spAnimation *self) {