aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Brasser <michael.brasser@live.com>2016-02-21 22:12:29 -0600
committerMichael Brasser <michael.brasser@live.com>2016-03-01 14:14:13 +0000
commitac64e7b14d347aa021dde3b2ef5cfce2d5750dbe (patch)
treeed13e623bd591d13e1704b5dcf788f05d4a1fbe9
parent99a83c8bad03a071f867bab41ffb149b38238ed6 (diff)
Ensure ShaderEffect correctly updates with supportsAtlasTexture.
Given a simple ShaderEffect with supportsAtlasTexture: ShaderEffect { property variant source: myImage supportsAtlasTextures: true } ensure the atlas subrect used by the ShaderEffect is updated if myImage.source changes. Change-Id: I4560b80ba38c3487b16f53411451fb9891920738 Reviewed-by: Gunnar Sletta <gunnar@sletta.org>
-rw-r--r--src/quick/items/qquickshadereffect.cpp8
-rw-r--r--src/quick/items/qquickshadereffect_p.h1
-rw-r--r--src/quick/items/qquickshadereffectnode.cpp1
-rw-r--r--src/quick/items/qquickshadereffectnode_p.h1
4 files changed, 11 insertions, 0 deletions
diff --git a/src/quick/items/qquickshadereffect.cpp b/src/quick/items/qquickshadereffect.cpp
index 349207f145..6cb9216955 100644
--- a/src/quick/items/qquickshadereffect.cpp
+++ b/src/quick/items/qquickshadereffect.cpp
@@ -952,6 +952,12 @@ void QQuickShaderEffect::updateGeometry()
update();
}
+void QQuickShaderEffect::updateGeometryIfAtlased()
+{
+ if (m_supportsAtlasTextures)
+ updateGeometry();
+}
+
void QQuickShaderEffect::updateLogAndStatus(const QString &log, int status)
{
m_log = parseLog() + log;
@@ -1000,6 +1006,8 @@ QSGNode *QQuickShaderEffect::updatePaintNode(QSGNode *oldNode, UpdatePaintNodeDa
m_dirtyUniforms = true;
m_dirtyGeometry = true;
connect(node, SIGNAL(logAndStatusChanged(QString,int)), this, SLOT(updateLogAndStatus(QString,int)));
+ connect(node, &QQuickShaderEffectNode::dirtyTexture,
+ this, &QQuickShaderEffect::updateGeometryIfAtlased);
}
QQuickShaderEffectMaterial *material = static_cast<QQuickShaderEffectMaterial *>(node->material());
diff --git a/src/quick/items/qquickshadereffect_p.h b/src/quick/items/qquickshadereffect_p.h
index a5e993ee0c..4ed87e88ac 100644
--- a/src/quick/items/qquickshadereffect_p.h
+++ b/src/quick/items/qquickshadereffect_p.h
@@ -167,6 +167,7 @@ protected:
private Q_SLOTS:
void updateGeometry();
+ void updateGeometryIfAtlased();
void updateLogAndStatus(const QString &log, int status);
void sourceDestroyed(QObject *object);
void propertyChanged(int mappedId);
diff --git a/src/quick/items/qquickshadereffectnode.cpp b/src/quick/items/qquickshadereffectnode.cpp
index 081e572e3b..954aa6c67b 100644
--- a/src/quick/items/qquickshadereffectnode.cpp
+++ b/src/quick/items/qquickshadereffectnode.cpp
@@ -491,6 +491,7 @@ QQuickShaderEffectNode::~QQuickShaderEffectNode()
void QQuickShaderEffectNode::markDirtyTexture()
{
markDirty(DirtyMaterial);
+ Q_EMIT dirtyTexture();
}
void QQuickShaderEffectNode::textureProviderDestroyed(QObject *object)
diff --git a/src/quick/items/qquickshadereffectnode_p.h b/src/quick/items/qquickshadereffectnode_p.h
index 76aecd1b04..8a7fd6c3a5 100644
--- a/src/quick/items/qquickshadereffectnode_p.h
+++ b/src/quick/items/qquickshadereffectnode_p.h
@@ -142,6 +142,7 @@ public:
Q_SIGNALS:
void logAndStatusChanged(const QString &, int status);
+ void dirtyTexture();
private Q_SLOTS:
void markDirtyTexture();