Fix affector group caching
authorAlan Alpert <alan.alpert@nokia.com>
Mon, 19 Dec 2011 07:58:49 +0000 (17:58 +1000)
committerQt by Nokia <qt-info@nokia.com>
Tue, 20 Dec 2011 05:39:51 +0000 (06:39 +0100)
It was possible for the cache to be updated before groups were properly
assigned, and it didn't update when they were.

Change-Id: If6835e2aad4a2412d17eb727da5d2414e4c20d60
Reviewed-by: Martin Jones <martin.jones@nokia.com>
src/quick/particles/qquickparticleaffector.cpp
src/quick/particles/qquickparticlesystem.cpp

index 5bfc699..854ab34 100644 (file)
@@ -159,10 +159,10 @@ void QQuickParticleAffector::componentComplete()
 }
 
 bool QQuickParticleAffector::activeGroup(int g) {
-    if (m_updateIntSet){
+    if (m_updateIntSet){ //This can occur before group ids are properly assigned, but that resets the flag
         m_groupIds.clear();
         foreach (const QString &p, m_groups)
-            m_groupIds << m_system->groupIds[p];//###Can this occur before group ids are properly assigned?
+            m_groupIds << m_system->groupIds[p];
         m_updateIntSet = false;
     }
     return m_groupIds.isEmpty() || m_groupIds.contains(g);
index cbb2605..87a454c 100644 (file)
@@ -908,6 +908,9 @@ void QQuickParticleSystem::emittersChanged()
     if (particleCount > bySysIdx.size())//New datum requests haven't updated it
         bySysIdx.resize(particleCount);
 
+    foreach (QQuickParticleAffector *a, m_affectors)//Groups may have changed
+        a->m_updateIntSet = true;
+
     foreach (QQuickParticlePainter *p, m_painters)
         loadPainter(p);