aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorKim Motoyoshi Kalland <kim.kalland@nokia.com>2011-11-02 14:07:40 +0100
committerQt by Nokia <qt-info@nokia.com>2011-11-07 13:49:00 +0100
commitaa6d47e9c45bbff074cc43596b2d5d4150aebb8b (patch)
tree1d970f08a1517bb97db7a6c91743f946967120ee /src
parent1ce5760f1f710f1d82d888250ea9683cbc63c5f4 (diff)
Emit signal when texture is updated in ShaderEffectSource.
Added a signal scheduledUpdateCompleted() which is emitted after the texture content has been updated as a result of a call to scheduleUpdate(). Also renamed the textureChanged() signal to updateRequested(), which I think is a more accurate name. Task-number: QTBUG-22174 Change-Id: If4d29e3be3a953494562d1ff55045f2154491d97 Reviewed-by: Yoann Lopes <yoann.lopes@nokia.com>
Diffstat (limited to 'src')
-rw-r--r--src/declarative/items/qquickshadereffectsource.cpp26
-rw-r--r--src/declarative/items/qquickshadereffectsource_p.h5
2 files changed, 15 insertions, 16 deletions
diff --git a/src/declarative/items/qquickshadereffectsource.cpp b/src/declarative/items/qquickshadereffectsource.cpp
index 587f7bad98..351ea34bbc 100644
--- a/src/declarative/items/qquickshadereffectsource.cpp
+++ b/src/declarative/items/qquickshadereffectsource.cpp
@@ -216,7 +216,7 @@ void QQuickShaderEffectTexture::scheduleUpdate()
return;
m_grab = true;
if (m_dirtyTexture)
- emit textureChanged();
+ emit updateRequested();
}
void QQuickShaderEffectTexture::setRecursive(bool recursive)
@@ -228,7 +228,7 @@ void QQuickShaderEffectTexture::markDirtyTexture()
{
m_dirtyTexture = true;
if (m_live || m_grab)
- emit textureChanged();
+ emit updateRequested();
}
void QQuickShaderEffectTexture::grab()
@@ -238,6 +238,8 @@ void QQuickShaderEffectTexture::grab()
delete m_secondaryFbo;
m_fbo = m_secondaryFbo = 0;
m_dirtyTexture = false;
+ if (m_grab)
+ emit scheduledUpdateCompleted();
return;
}
QSGNode *root = m_item;
@@ -246,16 +248,9 @@ void QQuickShaderEffectTexture::grab()
if (root->type() != QSGNode::RootNodeType)
return;
- if (m_size.isEmpty()) {
- delete m_fbo;
- delete m_secondaryFbo;
- m_secondaryFbo = m_fbo = 0;
- return;
- }
-
if (!m_renderer) {
m_renderer = m_context->createRenderer();
- connect(m_renderer, SIGNAL(sceneGraphChanged()), this, SLOT(markDirtyTexture()), Qt::DirectConnection);
+ connect(m_renderer, SIGNAL(sceneGraphChanged()), this, SLOT(markDirtyTexture()));
}
m_renderer->setRootNode(static_cast<QSGRootNode *>(root));
@@ -388,6 +383,9 @@ void QQuickShaderEffectTexture::grab()
#endif
if (m_recursive)
markDirtyTexture(); // Continuously update if 'live' and 'recursive'.
+
+ if (m_grab)
+ emit scheduledUpdateCompleted();
}
QImage QQuickShaderEffectTexture::toImage() const
@@ -516,7 +514,8 @@ void QQuickShaderEffectSource::ensureTexture()
"Cannot be used outside the rendering thread");
m_texture = new QQuickShaderEffectTexture(this);
- connect(m_texture, SIGNAL(textureChanged()), this, SLOT(update()));
+ connect(m_texture, SIGNAL(updateRequested()), this, SLOT(update()));
+ connect(m_texture, SIGNAL(scheduledUpdateCompleted()), this, SIGNAL(scheduledUpdateCompleted()));
}
QSGTextureProvider *QQuickShaderEffectSource::textureProvider() const
@@ -529,9 +528,8 @@ QSGTextureProvider *QQuickShaderEffectSource::textureProvider() const
"QQuickShaderEffectSource::textureProvider",
"Cannot be used outside the rendering thread");
const_cast<QQuickShaderEffectSource *>(this)->m_provider = new QQuickShaderEffectSourceTextureProvider();
-
const_cast<QQuickShaderEffectSource *>(this)->ensureTexture();
- connect(m_texture, SIGNAL(textureChanged()), m_provider, SIGNAL(textureChanged()), Qt::DirectConnection);
+ connect(m_texture, SIGNAL(updateRequested()), m_provider, SIGNAL(textureChanged()));
m_provider->sourceTexture = m_texture;
}
return m_provider;
@@ -884,7 +882,7 @@ QSGNode *QQuickShaderEffectSource::updatePaintNode(QSGNode *oldNode, UpdatePaint
if (!node) {
node = new QQuickShaderEffectSourceNode;
node->setTexture(m_texture);
- connect(m_texture, SIGNAL(textureChanged()), node, SLOT(markDirtyTexture()), Qt::DirectConnection);
+ connect(m_texture, SIGNAL(updateRequested()), node, SLOT(markDirtyTexture()));
}
// If live and recursive, update continuously.
diff --git a/src/declarative/items/qquickshadereffectsource_p.h b/src/declarative/items/qquickshadereffectsource_p.h
index 8117c06b9c..b61170ace8 100644
--- a/src/declarative/items/qquickshadereffectsource_p.h
+++ b/src/declarative/items/qquickshadereffectsource_p.h
@@ -119,7 +119,8 @@ public:
QImage toImage() const;
Q_SIGNALS:
- void textureChanged();
+ void updateRequested();
+ void scheduledUpdateCompleted();
public Q_SLOTS:
void markDirtyTexture();
@@ -226,7 +227,7 @@ Q_SIGNALS:
void mipmapChanged();
void recursiveChanged();
- void textureChanged();
+ void scheduledUpdateCompleted();
protected:
virtual QSGNode *updatePaintNode(QSGNode *, UpdatePaintNodeData *);