diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/particles/qquickparticlesystem.cpp | 7 | ||||
-rw-r--r-- | src/particles/qquickparticlesystem_p.h | 2 |
2 files changed, 8 insertions, 1 deletions
diff --git a/src/particles/qquickparticlesystem.cpp b/src/particles/qquickparticlesystem.cpp index 1499df0360..8e8c73320e 100644 --- a/src/particles/qquickparticlesystem.cpp +++ b/src/particles/qquickparticlesystem.cpp @@ -389,16 +389,21 @@ QQuickParticleData* QQuickParticleGroupData::newDatum(bool respectsLimits) bool QQuickParticleGroupData::recycle() { + m_latestAliveParticles.clear(); + while (dataHeap.top() <= m_system->timeInt) { foreach (QQuickParticleData* datum, dataHeap.pop()) { if (!datum->stillAlive(m_system)) { freeList.free(datum->index); } else { - prepareRecycler(datum); //ttl has been altered mid-way, put it back + m_latestAliveParticles.push_back(datum); } } } + for (auto particle : m_latestAliveParticles) + prepareRecycler(particle); //ttl has been altered mid-way, put it back + //TODO: If the data is clear, gc (consider shrinking stack size)? return freeList.count() == 0; } diff --git a/src/particles/qquickparticlesystem_p.h b/src/particles/qquickparticlesystem_p.h index 73351fb99a..d88e4949e3 100644 --- a/src/particles/qquickparticlesystem_p.h +++ b/src/particles/qquickparticlesystem_p.h @@ -226,6 +226,8 @@ public: private: int m_size; QQuickParticleSystem* m_system; + // Only used in recycle() for tracking of alive particles after latest recycling round + QVector<QQuickParticleData*> m_latestAliveParticles; }; struct Color4ub { |