Move QSGShaderEffectMaterial into the QSGShaderEffectNode. Now owned by Render Thread
authorGunnar Sletta <gunnar.sletta@nokia.com>
Fri, 19 Aug 2011 11:54:54 +0000 (13:54 +0200)
committerKim M. Kalland <kim.kalland@nokia.com>
Mon, 22 Aug 2011 07:55:45 +0000 (09:55 +0200)
Change-Id: Ib80fab95780bab8e620b4696cfde3c4777f4eb93
Reviewed-on: http://codereview.qt.nokia.com/3292
Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com>
Reviewed-by: Kim M. Kalland <kim.kalland@nokia.com>
src/declarative/items/qsgshadereffect.cpp
src/declarative/items/qsgshadereffect_p.h
src/declarative/items/qsgshadereffectnode.cpp
src/declarative/items/qsgshadereffectnode_p.h

index 6045c5f..97fe249 100644 (file)
@@ -578,12 +578,13 @@ QSGNode *QSGShaderEffect::updatePaintNode(QSGNode *oldNode, UpdatePaintNodeData
 
     if (!node) {
         node = new QSGShaderEffectNode;
-        node->setMaterial(&m_material);
         m_programDirty = true;
         m_dirtyData = true;
         m_dirtyGeometry = true;
     }
 
+    QSGShaderEffectMaterial *material = node->shaderMaterial();
+
     if (m_dirtyMesh) {
         node->setGeometry(0);
         m_dirtyMesh = false;
@@ -616,26 +617,26 @@ QSGNode *QSGShaderEffect::updatePaintNode(QSGNode *oldNode, UpdatePaintNodeData
             s.vertexCode = qt_default_vertex_code;
         s.className = metaObject()->className();
 
-        m_material.setProgramSource(s);
+        material->setProgramSource(s);
         node->markDirty(QSGNode::DirtyMaterial);
         m_programDirty = false;
     }
 
     // Update blending
-    if (bool(m_material.flags() & QSGMaterial::Blending) != m_blending) {
-        m_material.setFlag(QSGMaterial::Blending, m_blending);
+    if (bool(material->flags() & QSGMaterial::Blending) != m_blending) {
+        material->setFlag(QSGMaterial::Blending, m_blending);
         node->markDirty(QSGNode::DirtyMaterial);
     }
 
-    if (int(m_material.cullMode()) != int(m_cullMode)) {
-        m_material.setCullMode(QSGShaderEffectMaterial::CullMode(m_cullMode));
+    if (int(material->cullMode()) != int(m_cullMode)) {
+        material->setCullMode(QSGShaderEffectMaterial::CullMode(m_cullMode));
         node->markDirty(QSGNode::DirtyMaterial);
     }
 
     if (m_dirtyData) {
         QVector<QPair<QByteArray, QVariant> > values;
         QVector<QPair<QByteArray, QPointer<QSGItem> > > textures;
-        const QVector<QPair<QByteArray, QPointer<QSGItem> > > &oldTextures = m_material.textureProviders();
+        const QVector<QPair<QByteArray, QPointer<QSGItem> > > &oldTextures = material->textureProviders();
 
         for (QSet<QByteArray>::const_iterator it = m_source.uniformNames.begin(); 
              it != m_source.uniformNames.end(); ++it) {
@@ -653,8 +654,8 @@ QSGNode *QSGShaderEffect::updatePaintNode(QSGNode *oldNode, UpdatePaintNodeData
             if (t && t->textureChangedSignal())
                 connect(source.item, t->textureChangedSignal(), node, SLOT(markDirtyTexture()), Qt::DirectConnection);
         }
-        m_material.setUniforms(values);
-        m_material.setTextureProviders(textures);
+        material->setUniforms(values);
+        material->setTextureProviders(textures);
         node->markDirty(QSGNode::DirtyMaterial);
         m_dirtyData = false;
     }
index 0cced9a..c72441c 100644 (file)
@@ -142,7 +142,6 @@ private:
         QByteArray name;
     };
     QVector<SourceData> m_sources;
-    QSGShaderEffectMaterial m_material;
 
     uint m_blending : 1;
     uint m_dirtyData : 1;
index 8bd781c..f86b4cb 100644 (file)
@@ -306,6 +306,7 @@ void QSGShaderEffectMaterial::updateTextures() const
 QSGShaderEffectNode::QSGShaderEffectNode()
 {
     QSGNode::setFlag(UsePreprocess, true);
+    setMaterial(&m_material);
 }
 
 QSGShaderEffectNode::~QSGShaderEffectNode()
index eee7070..4623cac 100644 (file)
@@ -136,9 +136,15 @@ public:
 
     virtual void preprocess();
 
+    QSGShaderEffectMaterial *shaderMaterial() { return &m_material; }
+
 private Q_SLOTS:
     void markDirtyTexture();
 
+private:
+    QSGShaderEffectMaterial m_material;
+
+
 };
 
 QT_END_NAMESPACE