diff options
author | Kim Motoyoshi Kalland <kim.kalland@nokia.com> | 2011-11-02 14:07:40 +0100 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2011-11-07 13:49:00 +0100 |
commit | aa6d47e9c45bbff074cc43596b2d5d4150aebb8b (patch) | |
tree | 1d970f08a1517bb97db7a6c91743f946967120ee /src | |
parent | 1ce5760f1f710f1d82d888250ea9683cbc63c5f4 (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.cpp | 26 | ||||
-rw-r--r-- | src/declarative/items/qquickshadereffectsource_p.h | 5 |
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 *); |