aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorKaj Grönholm <kaj.gronholm@qt.io>2024-04-25 10:29:37 +0300
committerKaj Grönholm <kaj.gronholm@qt.io>2024-04-25 15:46:42 +0300
commit4375fff77441e11efc814a959950580d5b3645b5 (patch)
treefa765d6cfe8ecad52a6f47e71d934fe14623e146 /src
parent099f4677291d703ed55980ffd60ac2ede26b6217 (diff)
Fix crash in MultiEffect with dynamic delegates
Changing dummy QQuickShaderEffectSource to be private variable rather than static one fixes issue with dynamic delegates switching blurred items on/off. Pick-to: 6.7 6.7.1 6.5 Fixes: QTBUG-124730 Change-Id: Ibaebfd6cb228fe1b7fa91c8219c1355a93ceb19c Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io> Reviewed-by: Tomi Korpipää <tomi.korpipaa@qt.io> Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io>
Diffstat (limited to 'src')
-rw-r--r--src/effects/qquickmultieffect.cpp5
-rw-r--r--src/effects/qquickmultieffect_p_p.h2
2 files changed, 5 insertions, 2 deletions
diff --git a/src/effects/qquickmultieffect.cpp b/src/effects/qquickmultieffect.cpp
index 6b20c3fa14..7561649fbf 100644
--- a/src/effects/qquickmultieffect.cpp
+++ b/src/effects/qquickmultieffect.cpp
@@ -1697,11 +1697,12 @@ void QQuickMultiEffectPrivate::updateBlurItemsAmount(int blurLevel)
}
// Set the blur items source components
- static const auto dummyShaderSource = new QQuickShaderEffectSource(q);
+ if (!m_dummyShaderSource)
+ m_dummyShaderSource = new QQuickShaderEffectSource(q);
for (int i = 0; i < m_blurEffects.size(); i++) {
auto *blurEffect = m_blurEffects[i];
auto sourceItem = (i >= itemsAmount) ?
- static_cast<QQuickItem *>(dummyShaderSource) : (i == 0) ?
+ static_cast<QQuickItem *>(m_dummyShaderSource) : (i == 0) ?
static_cast<QQuickItem *>(m_shaderSource->output()) :
static_cast<QQuickItem *>(m_blurEffects[i - 1]);
auto sourceVariant = QVariant::fromValue<QQuickItem*>(sourceItem);
diff --git a/src/effects/qquickmultieffect_p_p.h b/src/effects/qquickmultieffect_p_p.h
index 2df33db45b..7d635e2e25 100644
--- a/src/effects/qquickmultieffect_p_p.h
+++ b/src/effects/qquickmultieffect_p_p.h
@@ -27,6 +27,7 @@ QT_REQUIRE_CONFIG(quick_shadereffect);
QT_BEGIN_NAMESPACE
class QQuickShaderEffect;
+class QQuickShaderEffectSource;
class QQuickMultiEffectPrivate : public QQuickItemPrivate
{
@@ -145,6 +146,7 @@ private:
QQuickItem *m_sourceItem = nullptr;
QGfxSourceProxy *m_shaderSource = nullptr;
QQuickShaderEffect *m_shaderEffect = nullptr;
+ QQuickShaderEffectSource *m_dummyShaderSource = nullptr;
QVector<QQuickShaderEffect *> m_blurEffects;
bool m_autoPaddingEnabled = true;
QRectF m_paddingRect;