Browse Source

[cpp] Fixed SkeletonJson deform timeline parsing. Fxied leak in EventQueue.

badlogic 7 years ago
parent
commit
425b2936d1

+ 2 - 2
spine-cpp/spine-cpp/include/spine/AnimationState.h

@@ -255,14 +255,14 @@ namespace Spine {
         friend class AnimationState;
         
     private:
-        Vector<EventQueueEntry*> _eventQueueEntries;
+        Vector<EventQueueEntry> _eventQueueEntries;
         AnimationState& _state;
         Pool<TrackEntry>& _trackEntryPool;
         bool _drainDisabled;
         
         static EventQueue* newEventQueue(AnimationState& state, Pool<TrackEntry>& trackEntryPool);
 
-        static EventQueueEntry* newEventQueueEntry(EventType eventType, TrackEntry* entry, Event* event = NULL);
+        static EventQueueEntry newEventQueueEntry(EventType eventType, TrackEntry* entry, Event* event = NULL);
         
         EventQueue(AnimationState& state, Pool<TrackEntry>& trackEntryPool);
         

+ 3 - 4
spine-cpp/spine-cpp/src/spine/AnimationState.cpp

@@ -214,15 +214,14 @@ namespace Spine {
         return new (__FILE__, __LINE__) EventQueue(state, trackEntryPool);
     }
     
-    EventQueueEntry* EventQueue::newEventQueueEntry(EventType eventType, TrackEntry* entry, Event* event) {
-        return new (__FILE__, __LINE__) EventQueueEntry(eventType, entry, event);
+    EventQueueEntry EventQueue::newEventQueueEntry(EventType eventType, TrackEntry* entry, Event* event) {
+        return EventQueueEntry(eventType, entry, event);
     }
     
     EventQueue::EventQueue(AnimationState& state, Pool<TrackEntry>& trackEntryPool) : _state(state), _trackEntryPool(trackEntryPool), _drainDisabled(false) {
     }
     
     EventQueue::~EventQueue() {
-        ContainerUtil::cleanUpVectorOfPointers(_eventQueueEntries);
     }
     
     void EventQueue::start(TrackEntry* entry) {
@@ -263,7 +262,7 @@ namespace Spine {
         
         // Don't cache _eventQueueEntries.size() so callbacks can queue their own events (eg, call setAnimation in AnimationState_Complete).
         for (int i = 0; i < _eventQueueEntries.size(); ++i) {
-            EventQueueEntry* queueEntry = _eventQueueEntries[i];
+            EventQueueEntry* queueEntry = &_eventQueueEntries[i];
             TrackEntry* trackEntry = queueEntry->_entry;
             
             switch (queueEntry->_type) {

+ 5 - 7
spine-cpp/spine-cpp/src/spine/SkeletonJson.cpp

@@ -1038,11 +1038,6 @@ namespace Spine {
                     weighted = attachment->_bones.size() != 0;
                     Vector<float>& vertices = attachment->_vertices;
                     deformLength = weighted ? static_cast<int>(vertices.size()) / 3 * 2 : static_cast<int>(vertices.size());
-                    Vector<float> tempDeform;
-                    tempDeform.ensureCapacity(deformLength);
-                    for (int i = 0; i < deformLength; ++i) {
-						tempDeform.add(0);
-                    }
 
                     timeline = new (__FILE__, __LINE__) DeformTimeline(timelineMap->_size);
                     
@@ -1054,7 +1049,10 @@ namespace Spine {
                         Vector<float> deform;
                         if (!vertices) {
                             if (weighted) {
-                                deform = tempDeform;
+                                deform.setSize(deformLength);
+                                for (int i = 0; i < deformLength; ++i) {
+                                    deform[i] = 0;
+                                }
                             }
                             else {
                                 deform = attachment->_vertices;
@@ -1063,7 +1061,7 @@ namespace Spine {
                         else {
                             int v, start = Json::getInt(valueMap, "offset", 0);
                             Json* vertex;
-                            deform = tempDeform;
+                            deform.setSize(deformLength);
                             if (_scale == 1) {
                                 for (vertex = vertices->_child, v = start; vertex; vertex = vertex->_next, ++v) {
                                     deform[v] = vertex->_valueFloat;