From: Gunnar Sletta Date: Fri, 19 Aug 2011 11:54:54 +0000 (+0200) Subject: Move QSGShaderEffectMaterial into the QSGShaderEffectNode. Now owned by Render Thread X-Git-Tag: qt-v5.0.0-alpha1~1697^2~65 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=8be12e2ac7937ad21ec30cb335d5733735887117;p=profile%2Fivi%2Fqtdeclarative.git Move QSGShaderEffectMaterial into the QSGShaderEffectNode. Now owned by Render Thread Change-Id: Ib80fab95780bab8e620b4696cfde3c4777f4eb93 Reviewed-on: http://codereview.qt.nokia.com/3292 Reviewed-by: Qt Sanity Bot Reviewed-by: Kim M. Kalland --- diff --git a/src/declarative/items/qsgshadereffect.cpp b/src/declarative/items/qsgshadereffect.cpp index 6045c5f..97fe249 100644 --- a/src/declarative/items/qsgshadereffect.cpp +++ b/src/declarative/items/qsgshadereffect.cpp @@ -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 > values; QVector > > textures; - const QVector > > &oldTextures = m_material.textureProviders(); + const QVector > > &oldTextures = material->textureProviders(); for (QSet::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; } diff --git a/src/declarative/items/qsgshadereffect_p.h b/src/declarative/items/qsgshadereffect_p.h index 0cced9a..c72441c 100644 --- a/src/declarative/items/qsgshadereffect_p.h +++ b/src/declarative/items/qsgshadereffect_p.h @@ -142,7 +142,6 @@ private: QByteArray name; }; QVector m_sources; - QSGShaderEffectMaterial m_material; uint m_blending : 1; uint m_dirtyData : 1; diff --git a/src/declarative/items/qsgshadereffectnode.cpp b/src/declarative/items/qsgshadereffectnode.cpp index 8bd781c..f86b4cb 100644 --- a/src/declarative/items/qsgshadereffectnode.cpp +++ b/src/declarative/items/qsgshadereffectnode.cpp @@ -306,6 +306,7 @@ void QSGShaderEffectMaterial::updateTextures() const QSGShaderEffectNode::QSGShaderEffectNode() { QSGNode::setFlag(UsePreprocess, true); + setMaterial(&m_material); } QSGShaderEffectNode::~QSGShaderEffectNode() diff --git a/src/declarative/items/qsgshadereffectnode_p.h b/src/declarative/items/qsgshadereffectnode_p.h index eee7070..4623cac 100644 --- a/src/declarative/items/qsgshadereffectnode_p.h +++ b/src/declarative/items/qsgshadereffectnode_p.h @@ -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