aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorGunnar Sletta <gunnar.sletta@nokia.com>2011-08-19 13:54:54 +0200
committerKim M. Kalland <kim.kalland@nokia.com>2011-08-22 09:55:45 +0200
commit8be12e2ac7937ad21ec30cb335d5733735887117 (patch)
tree4b9d3759850f73159dbf41c199ad1fd2e8628e95 /src
parenta8cd4aec45976062773ef88c0aa3c6fcee33a5b3 (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.cpp19
-rw-r--r--src/declarative/items/qsgshadereffect_p.h1
-rw-r--r--src/declarative/items/qsgshadereffectnode.cpp1
-rw-r--r--src/declarative/items/qsgshadereffectnode_p.h6
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