Fix QSGCustomParticle initialization
authorAlan Alpert <alan.alpert@nokia.com>
Fri, 23 Sep 2011 04:59:06 +0000 (14:59 +1000)
committerQt by Nokia <qt-info@nokia.com>
Thu, 29 Sep 2011 04:12:49 +0000 (06:12 +0200)
commit was failing because nodes weren't stored yet, which could lead to
an apparent loss of particles.

Change-Id: Ibde6aa75f6c43e2d485c163820e65e0c6ff8e952
Reviewed-on: http://codereview.qt-project.org/5437
Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com>
Reviewed-by: Martin Jones <martin.jones@nokia.com>
src/declarative/particles/qsgcustomparticle.cpp

index 5d1c605..707f680 100644 (file)
@@ -480,11 +480,19 @@ QSGShaderEffectNode* QSGCustomParticle::buildCustomNodes()
     foreach (const QString &str, m_groups){
         int gIdx = m_system->m_groupIds[str];
         int count = m_system->m_groupData[gIdx]->size();
+
+        QSGShaderEffectNode* node = new QSGShaderEffectNode();
+        m_nodes.insert(gIdx, node);
+
+        node->setMaterial(m_material);
+        node->markDirty(QSGNode::DirtyMaterial);
+
         //Create Particle Geometry
         int vCount = count * 4;
         int iCount = count * 6;
         QSGGeometry *g = new QSGGeometry(PlainParticle_AttributeSet, vCount, iCount);
         g->setDrawingMode(GL_TRIANGLES);
+        node->setGeometry(g);
         PlainVertex *vertices = (PlainVertex *) g->vertexData();
         for (int p=0; p < count; ++p) {
             commit(gIdx, p);
@@ -512,14 +520,6 @@ QSGShaderEffectNode* QSGCustomParticle::buildCustomNodes()
             indices[5] = o + 2;
             indices += 6;
         }
-
-        QSGShaderEffectNode* node = new QSGShaderEffectNode();
-
-        node->setGeometry(g);
-        node->setMaterial(m_material);
-        node->markDirty(QSGNode::DirtyMaterial);
-
-        m_nodes.insert(gIdx, node);
     }
     foreach (QSGShaderEffectNode* node, m_nodes){
         if (node == *(m_nodes.begin()))