diff options
author | Gunnar Sletta <gunnar.sletta@nokia.com> | 2011-08-19 13:54:54 +0200 |
---|---|---|
committer | Kim M. Kalland <kim.kalland@nokia.com> | 2011-08-22 09:55:45 +0200 |
commit | 8be12e2ac7937ad21ec30cb335d5733735887117 (patch) | |
tree | 4b9d3759850f73159dbf41c199ad1fd2e8628e95 /src | |
parent | a8cd4aec45976062773ef88c0aa3c6fcee33a5b3 (diff) |
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 <qt_sanity_bot@ovi.com>
Reviewed-by: Kim M. Kalland <kim.kalland@nokia.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/declarative/items/qsgshadereffect.cpp | 19 | ||||
-rw-r--r-- | src/declarative/items/qsgshadereffect_p.h | 1 | ||||
-rw-r--r-- | src/declarative/items/qsgshadereffectnode.cpp | 1 | ||||
-rw-r--r-- | src/declarative/items/qsgshadereffectnode_p.h | 6 |
4 files changed, 17 insertions, 10 deletions
diff --git a/src/declarative/items/qsgshadereffect.cpp b/src/declarative/items/qsgshadereffect.cpp index 6045c5fee9..97fe24937e 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<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; } diff --git a/src/declarative/items/qsgshadereffect_p.h b/src/declarative/items/qsgshadereffect_p.h index 0cced9a229..c72441c5ef 100644 --- a/src/declarative/items/qsgshadereffect_p.h +++ b/src/declarative/items/qsgshadereffect_p.h @@ -142,7 +142,6 @@ private: QByteArray name; }; QVector<SourceData> 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 8bd781ce58..f86b4cba4b 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 eee70703ea..4623cac9ce 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 |