From 8be12e2ac7937ad21ec30cb335d5733735887117 Mon Sep 17 00:00:00 2001 From: Gunnar Sletta Date: Fri, 19 Aug 2011 13:54:54 +0200 Subject: [PATCH] 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 --- src/declarative/items/qsgshadereffect.cpp | 19 ++++++++++--------- src/declarative/items/qsgshadereffect_p.h | 1 - src/declarative/items/qsgshadereffectnode.cpp | 1 + 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 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 -- 2.7.4