Эх сурвалжийг харах

[c] Additional #2325 work, precalculate the space needed for property IDs in animations

Mario Zechner 2 жил өмнө
parent
commit
fed76c80c6

+ 16 - 12
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) {