From 425b2936d1420a5417d627aee3c31a16a6be3919 Mon Sep 17 00:00:00 2001 From: badlogic Date: Thu, 22 Feb 2018 17:13:45 +0100 Subject: [PATCH] [cpp] Fixed SkeletonJson deform timeline parsing. Fxied leak in EventQueue. --- spine-cpp/spine-cpp/include/spine/AnimationState.h | 4 ++-- spine-cpp/spine-cpp/src/spine/AnimationState.cpp | 7 +++---- spine-cpp/spine-cpp/src/spine/SkeletonJson.cpp | 12 +++++------- 3 files changed, 10 insertions(+), 13 deletions(-) diff --git a/spine-cpp/spine-cpp/include/spine/AnimationState.h b/spine-cpp/spine-cpp/include/spine/AnimationState.h index 427e1e774..7958eec57 100644 --- a/spine-cpp/spine-cpp/include/spine/AnimationState.h +++ b/spine-cpp/spine-cpp/include/spine/AnimationState.h @@ -255,14 +255,14 @@ namespace Spine { friend class AnimationState; private: - Vector _eventQueueEntries; + Vector _eventQueueEntries; AnimationState& _state; Pool& _trackEntryPool; bool _drainDisabled; static EventQueue* newEventQueue(AnimationState& state, Pool& 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& trackEntryPool); diff --git a/spine-cpp/spine-cpp/src/spine/AnimationState.cpp b/spine-cpp/spine-cpp/src/spine/AnimationState.cpp index 3a44e44ee..7b33b5872 100644 --- a/spine-cpp/spine-cpp/src/spine/AnimationState.cpp +++ b/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& 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) { diff --git a/spine-cpp/spine-cpp/src/spine/SkeletonJson.cpp b/spine-cpp/spine-cpp/src/spine/SkeletonJson.cpp index ca1b6fcba..c395e2170 100644 --- a/spine-cpp/spine-cpp/src/spine/SkeletonJson.cpp +++ b/spine-cpp/spine-cpp/src/spine/SkeletonJson.cpp @@ -1038,11 +1038,6 @@ namespace Spine { weighted = attachment->_bones.size() != 0; Vector& vertices = attachment->_vertices; deformLength = weighted ? static_cast(vertices.size()) / 3 * 2 : static_cast(vertices.size()); - Vector 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 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;