aboutsummaryrefslogtreecommitdiffstats
path: root/src/effects
diff options
context:
space:
mode:
Diffstat (limited to 'src/effects')
-rw-r--r--src/effects/CMakeLists.txt357
-rw-r--r--src/effects/data/shaders/bluritems.frag3
-rw-r--r--src/effects/data/shaders/bluritems.frag.qsbbin1738 -> 0 bytes
-rw-r--r--src/effects/data/shaders/bluritems.vert.qsbbin2395 -> 0 bytes
-rw-r--r--src/effects/data/shaders/compile.bat46
-rw-r--r--src/effects/data/shaders/multieffect.frag3
-rw-r--r--src/effects/data/shaders/multieffect_c.vert.qsbbin2439 -> 0 bytes
-rw-r--r--src/effects/data/shaders/multieffect_c0.frag.qsbbin2862 -> 0 bytes
-rw-r--r--src/effects/data/shaders/multieffect_cb1.frag.qsbbin3345 -> 0 bytes
-rw-r--r--src/effects/data/shaders/multieffect_cb2.frag.qsbbin3492 -> 0 bytes
-rw-r--r--src/effects/data/shaders/multieffect_cb3.frag.qsbbin3612 -> 0 bytes
-rw-r--r--src/effects/data/shaders/multieffect_cbs1.frag.qsbbin4004 -> 0 bytes
-rw-r--r--src/effects/data/shaders/multieffect_cbs2.frag.qsbbin4206 -> 0 bytes
-rw-r--r--src/effects/data/shaders/multieffect_cbs3.frag.qsbbin4399 -> 0 bytes
-rw-r--r--src/effects/data/shaders/multieffect_cm0.frag.qsbbin3365 -> 0 bytes
-rw-r--r--src/effects/data/shaders/multieffect_cmb1.frag.qsbbin3838 -> 0 bytes
-rw-r--r--src/effects/data/shaders/multieffect_cmb2.frag.qsbbin3994 -> 0 bytes
-rw-r--r--src/effects/data/shaders/multieffect_cmb3.frag.qsbbin4138 -> 0 bytes
-rw-r--r--src/effects/data/shaders/multieffect_cmbs1.frag.qsbbin4511 -> 0 bytes
-rw-r--r--src/effects/data/shaders/multieffect_cmbs2.frag.qsbbin4727 -> 0 bytes
-rw-r--r--src/effects/data/shaders/multieffect_cmbs3.frag.qsbbin4884 -> 0 bytes
-rw-r--r--src/effects/data/shaders/multieffect_cms0.frag.qsbbin3752 -> 0 bytes
-rw-r--r--src/effects/data/shaders/multieffect_cms1.frag.qsbbin4235 -> 0 bytes
-rw-r--r--src/effects/data/shaders/multieffect_cms2.frag.qsbbin4432 -> 0 bytes
-rw-r--r--src/effects/data/shaders/multieffect_cms3.frag.qsbbin4560 -> 0 bytes
-rw-r--r--src/effects/data/shaders/multieffect_cs.vert.qsbbin2680 -> 0 bytes
-rw-r--r--src/effects/data/shaders/multieffect_cs0.frag.qsbbin3230 -> 0 bytes
-rw-r--r--src/effects/data/shaders/multieffect_cs1.frag.qsbbin3771 -> 0 bytes
-rw-r--r--src/effects/data/shaders/multieffect_cs2.frag.qsbbin3927 -> 0 bytes
-rw-r--r--src/effects/data/shaders/multieffect_cs3.frag.qsbbin4031 -> 0 bytes
-rw-r--r--src/effects/qgfxsourceproxy_p.h12
-rw-r--r--src/effects/qquickmultieffect.cpp114
-rw-r--r--src/effects/qquickmultieffect_p.h2
-rw-r--r--src/effects/qquickmultieffect_p_p.h2
-rw-r--r--src/effects/qtquickeffectsglobal_p.h2
35 files changed, 404 insertions, 137 deletions
diff --git a/src/effects/CMakeLists.txt b/src/effects/CMakeLists.txt
index 034dbb1542..85e4b3c514 100644
--- a/src/effects/CMakeLists.txt
+++ b/src/effects/CMakeLists.txt
@@ -25,46 +25,13 @@ qt_internal_add_qml_module(QuickEffectsPrivate
Qt::GuiPrivate
Qt::QmlPrivate
Qt::QuickPrivate
- GENERATE_CPP_EXPORTS
- GENERATE_PRIVATE_CPP_EXPORTS
-)
-
-# Resources:
-set(effects_resource_files
- "data/BlurItem.qml"
- "data/shaders/bluritems.vert.qsb"
- "data/shaders/bluritems.frag.qsb"
- "data/shaders/multieffect_c.vert.qsb"
- "data/shaders/multieffect_cs.vert.qsb"
- "data/shaders/multieffect_c0.frag.qsb"
- "data/shaders/multieffect_cb1.frag.qsb"
- "data/shaders/multieffect_cb2.frag.qsb"
- "data/shaders/multieffect_cb3.frag.qsb"
- "data/shaders/multieffect_cbs1.frag.qsb"
- "data/shaders/multieffect_cbs2.frag.qsb"
- "data/shaders/multieffect_cbs3.frag.qsb"
- "data/shaders/multieffect_cm0.frag.qsb"
- "data/shaders/multieffect_cmb1.frag.qsb"
- "data/shaders/multieffect_cmb2.frag.qsb"
- "data/shaders/multieffect_cmb3.frag.qsb"
- "data/shaders/multieffect_cmbs1.frag.qsb"
- "data/shaders/multieffect_cmbs2.frag.qsb"
- "data/shaders/multieffect_cmbs3.frag.qsb"
- "data/shaders/multieffect_cms0.frag.qsb"
- "data/shaders/multieffect_cms1.frag.qsb"
- "data/shaders/multieffect_cms2.frag.qsb"
- "data/shaders/multieffect_cms3.frag.qsb"
- "data/shaders/multieffect_cs0.frag.qsb"
- "data/shaders/multieffect_cs1.frag.qsb"
- "data/shaders/multieffect_cs2.frag.qsb"
- "data/shaders/multieffect_cs3.frag.qsb"
-)
+ )
qt_internal_add_resource(QuickEffectsPrivate "effects"
PREFIX
"/"
FILES
- ${effects_resource_files}
+ "data/BlurItem.qml"
)
qt_internal_extend_target(QuickEffectsPrivate CONDITION MSVC
@@ -80,3 +47,323 @@ qt_internal_extend_target(QuickEffectsPrivate CONDITION EXISTS "qqml_enable_gcov
-fprofile-arcs
-ftest-coverage
)
+
+set(EFFECT_SHADER_ARGS
+ SILENT
+ PRECOMPILE
+ OPTIMIZED
+ MULTIVIEW
+ PREFIX
+ "/"
+)
+
+qt_internal_add_shaders(QuickEffectsPrivate "multieffect_shaders1"
+ ${EFFECT_SHADER_ARGS}
+ BATCHABLE
+ FILES
+ "data/shaders/bluritems.vert"
+ "data/shaders/bluritems.frag"
+)
+
+# Multieffect fragment shaders
+# c = Common color effects
+# m = Mask
+# b = Blur
+# s = Shadow
+# [n] = Amount of blur items used
+
+qt_internal_add_shaders(QuickEffectsPrivate "multieffect_shaders2"
+ ${EFFECT_SHADER_ARGS}
+ BATCHABLE
+ FILES
+ "data/shaders/multieffect.vert"
+ OUTPUTS
+ "data/shaders/multieffect_c.vert.qsb"
+)
+
+qt_internal_add_shaders(QuickEffectsPrivate "multieffect_shaders3"
+ ${EFFECT_SHADER_ARGS}
+ BATCHABLE
+ FILES
+ "data/shaders/multieffect.vert"
+ OUTPUTS
+ "data/shaders/multieffect_cs.vert.qsb"
+ DEFINES
+ SHADOW
+)
+
+qt_internal_add_shaders(QuickEffectsPrivate "multieffect_shaders4"
+ ${EFFECT_SHADER_ARGS}
+ FILES
+ "data/shaders/multieffect.frag"
+ OUTPUTS
+ "data/shaders/multieffect_c0.frag.qsb"
+)
+
+qt_internal_add_shaders(QuickEffectsPrivate "multieffect_shaders5"
+ ${EFFECT_SHADER_ARGS}
+ FILES
+ "data/shaders/multieffect.frag"
+ OUTPUTS
+ "data/shaders/multieffect_cm0.frag.qsb"
+ DEFINES
+ MASK
+)
+
+# Special shaders for non-blurred shadows (cs0 and cms0)
+qt_internal_add_shaders(QuickEffectsPrivate "multieffect_shaders6"
+ ${EFFECT_SHADER_ARGS}
+ FILES
+ "data/shaders/multieffect.frag"
+ OUTPUTS
+ "data/shaders/multieffect_cs0.frag.qsb"
+ DEFINES
+ SHADOW
+ BL0
+)
+
+qt_internal_add_shaders(QuickEffectsPrivate "multieffect_shaders7"
+ ${EFFECT_SHADER_ARGS}
+ FILES
+ "data/shaders/multieffect.frag"
+ OUTPUTS
+ "data/shaders/multieffect_cms0.frag.qsb"
+ DEFINES
+ MASK
+ SHADOW
+ BL0
+)
+
+# Shaders for different blur levels
+qt_internal_add_shaders(QuickEffectsPrivate "multieffect_shaders8"
+ ${EFFECT_SHADER_ARGS}
+ FILES
+ "data/shaders/multieffect.frag"
+ OUTPUTS
+ "data/shaders/multieffect_cb1.frag.qsb"
+ DEFINES
+ BLUR
+ BL1
+)
+
+qt_internal_add_shaders(QuickEffectsPrivate "multieffect_shaders9"
+ ${EFFECT_SHADER_ARGS}
+ FILES
+ "data/shaders/multieffect.frag"
+ OUTPUTS
+ "data/shaders/multieffect_cs1.frag.qsb"
+ DEFINES
+ SHADOW
+ BL1
+)
+
+qt_internal_add_shaders(QuickEffectsPrivate "multieffect_shaders10"
+ ${EFFECT_SHADER_ARGS}
+ FILES
+ "data/shaders/multieffect.frag"
+ OUTPUTS
+ "data/shaders/multieffect_cmb1.frag.qsb"
+ DEFINES
+ MASK
+ BLUR
+ BL1
+)
+
+qt_internal_add_shaders(QuickEffectsPrivate "multieffect_shaders11"
+ ${EFFECT_SHADER_ARGS}
+ FILES
+ "data/shaders/multieffect.frag"
+ OUTPUTS
+ "data/shaders/multieffect_cms1.frag.qsb"
+ DEFINES
+ MASK
+ SHADOW
+ BL1
+)
+
+qt_internal_add_shaders(QuickEffectsPrivate "multieffect_shaders12"
+ ${EFFECT_SHADER_ARGS}
+ FILES
+ "data/shaders/multieffect.frag"
+ OUTPUTS
+ "data/shaders/multieffect_cbs1.frag.qsb"
+ DEFINES
+ BLUR
+ SHADOW
+ BL1
+)
+
+qt_internal_add_shaders(QuickEffectsPrivate "multieffect_shaders13"
+ ${EFFECT_SHADER_ARGS}
+ FILES
+ "data/shaders/multieffect.frag"
+ OUTPUTS
+ "data/shaders/multieffect_cmbs1.frag.qsb"
+ DEFINES
+ MASK
+ BLUR
+ SHADOW
+ BL1
+)
+
+# level 2
+qt_internal_add_shaders(QuickEffectsPrivate "multieffect_shaders14"
+ ${EFFECT_SHADER_ARGS}
+ FILES
+ "data/shaders/multieffect.frag"
+ OUTPUTS
+ "data/shaders/multieffect_cb2.frag.qsb"
+ DEFINES
+ BLUR
+ BL1
+ BL2
+)
+
+qt_internal_add_shaders(QuickEffectsPrivate "multieffect_shaders15"
+ ${EFFECT_SHADER_ARGS}
+ FILES
+ "data/shaders/multieffect.frag"
+ OUTPUTS
+ "data/shaders/multieffect_cs2.frag.qsb"
+ DEFINES
+ SHADOW
+ BL1
+ BL2
+)
+
+qt_internal_add_shaders(QuickEffectsPrivate "multieffect_shaders16"
+ ${EFFECT_SHADER_ARGS}
+ FILES
+ "data/shaders/multieffect.frag"
+ OUTPUTS
+ "data/shaders/multieffect_cmb2.frag.qsb"
+ DEFINES
+ MASK
+ BLUR
+ BL1
+ BL2
+)
+
+qt_internal_add_shaders(QuickEffectsPrivate "multieffect_shaders17"
+ ${EFFECT_SHADER_ARGS}
+ FILES
+ "data/shaders/multieffect.frag"
+ OUTPUTS
+ "data/shaders/multieffect_cms2.frag.qsb"
+ DEFINES
+ MASK
+ SHADOW
+ BL1
+ BL2
+)
+
+qt_internal_add_shaders(QuickEffectsPrivate "multieffect_shaders18"
+ ${EFFECT_SHADER_ARGS}
+ FILES
+ "data/shaders/multieffect.frag"
+ OUTPUTS
+ "data/shaders/multieffect_cbs2.frag.qsb"
+ DEFINES
+ BLUR
+ SHADOW
+ BL1
+ BL2
+)
+
+qt_internal_add_shaders(QuickEffectsPrivate "multieffect_shaders19"
+ ${EFFECT_SHADER_ARGS}
+ FILES
+ "data/shaders/multieffect.frag"
+ OUTPUTS
+ "data/shaders/multieffect_cmbs2.frag.qsb"
+ DEFINES
+ MASK
+ BLUR
+ SHADOW
+ BL1
+ BL2
+)
+
+# level 3
+qt_internal_add_shaders(QuickEffectsPrivate "multieffect_shaders20"
+ ${EFFECT_SHADER_ARGS}
+ FILES
+ "data/shaders/multieffect.frag"
+ OUTPUTS
+ "data/shaders/multieffect_cb3.frag.qsb"
+ DEFINES
+ BLUR
+ BL1
+ BL2
+ BL3
+)
+
+qt_internal_add_shaders(QuickEffectsPrivate "multieffect_shaders21"
+ ${EFFECT_SHADER_ARGS}
+ FILES
+ "data/shaders/multieffect.frag"
+ OUTPUTS
+ "data/shaders/multieffect_cs3.frag.qsb"
+ DEFINES
+ SHADOW
+ BL1
+ BL2
+ BL3
+)
+
+qt_internal_add_shaders(QuickEffectsPrivate "multieffect_shaders22"
+ ${EFFECT_SHADER_ARGS}
+ FILES
+ "data/shaders/multieffect.frag"
+ OUTPUTS
+ "data/shaders/multieffect_cmb3.frag.qsb"
+ DEFINES
+ MASK
+ BLUR
+ BL1
+ BL2
+ BL3
+)
+
+qt_internal_add_shaders(QuickEffectsPrivate "multieffect_shaders23"
+ ${EFFECT_SHADER_ARGS}
+ FILES
+ "data/shaders/multieffect.frag"
+ OUTPUTS
+ "data/shaders/multieffect_cms3.frag.qsb"
+ DEFINES
+ MASK
+ SHADOW
+ BL1
+ BL2
+ BL3
+)
+
+qt_internal_add_shaders(QuickEffectsPrivate "multieffect_shaders24"
+ ${EFFECT_SHADER_ARGS}
+ FILES
+ "data/shaders/multieffect.frag"
+ OUTPUTS
+ "data/shaders/multieffect_cbs3.frag.qsb"
+ DEFINES
+ BLUR
+ SHADOW
+ BL1
+ BL2
+ BL3
+)
+
+qt_internal_add_shaders(QuickEffectsPrivate "multieffect_shaders25"
+ ${EFFECT_SHADER_ARGS}
+ FILES
+ "data/shaders/multieffect.frag"
+ OUTPUTS
+ "data/shaders/multieffect_cmbs3.frag.qsb"
+ DEFINES
+ MASK
+ BLUR
+ SHADOW
+ BL1
+ BL2
+ BL3
+)
diff --git a/src/effects/data/shaders/bluritems.frag b/src/effects/data/shaders/bluritems.frag
index 4198e2f39d..cf3eab7356 100644
--- a/src/effects/data/shaders/bluritems.frag
+++ b/src/effects/data/shaders/bluritems.frag
@@ -1,3 +1,6 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
#version 440
layout(location = 0) in vec2 texCoord0;
diff --git a/src/effects/data/shaders/bluritems.frag.qsb b/src/effects/data/shaders/bluritems.frag.qsb
deleted file mode 100644
index 61e85d0daa..0000000000
--- a/src/effects/data/shaders/bluritems.frag.qsb
+++ /dev/null
Binary files differ
diff --git a/src/effects/data/shaders/bluritems.vert.qsb b/src/effects/data/shaders/bluritems.vert.qsb
deleted file mode 100644
index 97020e2f27..0000000000
--- a/src/effects/data/shaders/bluritems.vert.qsb
+++ /dev/null
Binary files differ
diff --git a/src/effects/data/shaders/compile.bat b/src/effects/data/shaders/compile.bat
deleted file mode 100644
index a24a4b2a72..0000000000
--- a/src/effects/data/shaders/compile.bat
+++ /dev/null
@@ -1,46 +0,0 @@
-:: Copyright (C) 2022 The Qt Company Ltd.
-:: SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
-
-:: Multieffect fragment shaders ::
-:: c = Common color effects
-:: m = Mask
-:: b = Blur
-:: s = Shadow
-:: [n] = Amount of blur items used
-
-qsb --glsl "150,120,100 es" --hlsl 50 --msl 12 -O -c -o multieffect_c0.frag.qsb multieffect.frag
-qsb -DMASK --glsl "150,120,100 es" --hlsl 50 --msl 12 -O -c -o multieffect_cm0.frag.qsb multieffect.frag
-
-:: Special shaders for non-blurred shadows
-qsb -DBL0 -DSHADOW --glsl "150,120,100 es" --hlsl 50 --msl 12 -O -c -o multieffect_cs0.frag.qsb multieffect.frag
-qsb -DBL0 -DMASK -DSHADOW --glsl "150,120,100 es" --hlsl 50 --msl 12 -O -c -o multieffect_cms0.frag.qsb multieffect.frag
-
-:: Shaders for different blur levels
-qsb -DBL1 -DBLUR --glsl "150,120,100 es" --hlsl 50 --msl 12 -O -c -o multieffect_cb1.frag.qsb multieffect.frag
-qsb -DBL1 -DSHADOW --glsl "150,120,100 es" --hlsl 50 --msl 12 -O -c -o multieffect_cs1.frag.qsb multieffect.frag
-qsb -DBL1 -DMASK -DBLUR --glsl "150,120,100 es" --hlsl 50 --msl 12 -O -c -o multieffect_cmb1.frag.qsb multieffect.frag
-qsb -DBL1 -DMASK -DSHADOW --glsl "150,120,100 es" --hlsl 50 --msl 12 -O -c -o multieffect_cms1.frag.qsb multieffect.frag
-qsb -DBL1 -DBLUR -DSHADOW --glsl "150,120,100 es" --hlsl 50 --msl 12 -O -c -o multieffect_cbs1.frag.qsb multieffect.frag
-qsb -DBL1 -DMASK -DBLUR -DSHADOW --glsl "150,120,100 es" --hlsl 50 --msl 12 -O -c -o multieffect_cmbs1.frag.qsb multieffect.frag
-
-qsb -DBL1 -DBL2 -DBLUR --glsl "150,120,100 es" --hlsl 50 --msl 12 -O -c -o multieffect_cb2.frag.qsb multieffect.frag
-qsb -DBL1 -DBL2 -DSHADOW --glsl "150,120,100 es" --hlsl 50 --msl 12 -O -c -o multieffect_cs2.frag.qsb multieffect.frag
-qsb -DBL1 -DBL2 -DMASK -DBLUR --glsl "150,120,100 es" --hlsl 50 --msl 12 -O -c -o multieffect_cmb2.frag.qsb multieffect.frag
-qsb -DBL1 -DBL2 -DMASK -DSHADOW --glsl "150,120,100 es" --hlsl 50 --msl 12 -O -c -o multieffect_cms2.frag.qsb multieffect.frag
-qsb -DBL1 -DBL2 -DBLUR -DSHADOW --glsl "150,120,100 es" --hlsl 50 --msl 12 -O -c -o multieffect_cbs2.frag.qsb multieffect.frag
-qsb -DBL1 -DBL2 -DMASK -DBLUR -DSHADOW --glsl "150,120,100 es" --hlsl 50 --msl 12 -O -c -o multieffect_cmbs2.frag.qsb multieffect.frag
-
-qsb -DBL1 -DBL2 -DBL3 -DBLUR --glsl "150,120,100 es" --hlsl 50 --msl 12 -O -c -o multieffect_cb3.frag.qsb multieffect.frag
-qsb -DBL1 -DBL2 -DBL3 -DSHADOW --glsl "150,120,100 es" --hlsl 50 --msl 12 -O -c -o multieffect_cs3.frag.qsb multieffect.frag
-qsb -DBL1 -DBL2 -DBL3 -DMASK -DBLUR --glsl "150,120,100 es" --hlsl 50 --msl 12 -O -c -o multieffect_cmb3.frag.qsb multieffect.frag
-qsb -DBL1 -DBL2 -DBL3 -DMASK -DSHADOW --glsl "150,120,100 es" --hlsl 50 --msl 12 -O -c -o multieffect_cms3.frag.qsb multieffect.frag
-qsb -DBL1 -DBL2 -DBL3 -DBLUR -DSHADOW --glsl "150,120,100 es" --hlsl 50 --msl 12 -O -c -o multieffect_cbs3.frag.qsb multieffect.frag
-qsb -DBL1 -DBL2 -DBL3 -DMASK -DBLUR -DSHADOW --glsl "150,120,100 es" --hlsl 50 --msl 12 -O -c -o multieffect_cmbs3.frag.qsb multieffect.frag
-
-:: Multieffect vertex shaders ::
-qsb -b --glsl "150,120,100 es" --hlsl 50 --msl 12 -O -c -o multieffect_c.vert.qsb multieffect.vert
-qsb -DSHADOW -b --glsl "150,120,100 es" --hlsl 50 --msl 12 -O -c -o multieffect_cs.vert.qsb multieffect.vert
-
-:: Bluritems shaders ::
-qsb --glsl "150,120,100 es" --hlsl 50 --msl 12 -O -c -o bluritems.frag.qsb bluritems.frag
-qsb -b --glsl "150,120,100 es" --hlsl 50 --msl 12 -O -c -o bluritems.vert.qsb bluritems.vert
diff --git a/src/effects/data/shaders/multieffect.frag b/src/effects/data/shaders/multieffect.frag
index 972e87fd41..94099f503f 100644
--- a/src/effects/data/shaders/multieffect.frag
+++ b/src/effects/data/shaders/multieffect.frag
@@ -1,3 +1,6 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
#version 440
layout(location = 0) in vec2 texCoord;
diff --git a/src/effects/data/shaders/multieffect_c.vert.qsb b/src/effects/data/shaders/multieffect_c.vert.qsb
deleted file mode 100644
index e95790de4d..0000000000
--- a/src/effects/data/shaders/multieffect_c.vert.qsb
+++ /dev/null
Binary files differ
diff --git a/src/effects/data/shaders/multieffect_c0.frag.qsb b/src/effects/data/shaders/multieffect_c0.frag.qsb
deleted file mode 100644
index d57768566d..0000000000
--- a/src/effects/data/shaders/multieffect_c0.frag.qsb
+++ /dev/null
Binary files differ
diff --git a/src/effects/data/shaders/multieffect_cb1.frag.qsb b/src/effects/data/shaders/multieffect_cb1.frag.qsb
deleted file mode 100644
index 5765ff7fa8..0000000000
--- a/src/effects/data/shaders/multieffect_cb1.frag.qsb
+++ /dev/null
Binary files differ
diff --git a/src/effects/data/shaders/multieffect_cb2.frag.qsb b/src/effects/data/shaders/multieffect_cb2.frag.qsb
deleted file mode 100644
index 8e5d1da445..0000000000
--- a/src/effects/data/shaders/multieffect_cb2.frag.qsb
+++ /dev/null
Binary files differ
diff --git a/src/effects/data/shaders/multieffect_cb3.frag.qsb b/src/effects/data/shaders/multieffect_cb3.frag.qsb
deleted file mode 100644
index 1dd589836f..0000000000
--- a/src/effects/data/shaders/multieffect_cb3.frag.qsb
+++ /dev/null
Binary files differ
diff --git a/src/effects/data/shaders/multieffect_cbs1.frag.qsb b/src/effects/data/shaders/multieffect_cbs1.frag.qsb
deleted file mode 100644
index bbcee6cb9d..0000000000
--- a/src/effects/data/shaders/multieffect_cbs1.frag.qsb
+++ /dev/null
Binary files differ
diff --git a/src/effects/data/shaders/multieffect_cbs2.frag.qsb b/src/effects/data/shaders/multieffect_cbs2.frag.qsb
deleted file mode 100644
index db04f68296..0000000000
--- a/src/effects/data/shaders/multieffect_cbs2.frag.qsb
+++ /dev/null
Binary files differ
diff --git a/src/effects/data/shaders/multieffect_cbs3.frag.qsb b/src/effects/data/shaders/multieffect_cbs3.frag.qsb
deleted file mode 100644
index a32d6446f2..0000000000
--- a/src/effects/data/shaders/multieffect_cbs3.frag.qsb
+++ /dev/null
Binary files differ
diff --git a/src/effects/data/shaders/multieffect_cm0.frag.qsb b/src/effects/data/shaders/multieffect_cm0.frag.qsb
deleted file mode 100644
index d29a83245a..0000000000
--- a/src/effects/data/shaders/multieffect_cm0.frag.qsb
+++ /dev/null
Binary files differ
diff --git a/src/effects/data/shaders/multieffect_cmb1.frag.qsb b/src/effects/data/shaders/multieffect_cmb1.frag.qsb
deleted file mode 100644
index 8c439307e2..0000000000
--- a/src/effects/data/shaders/multieffect_cmb1.frag.qsb
+++ /dev/null
Binary files differ
diff --git a/src/effects/data/shaders/multieffect_cmb2.frag.qsb b/src/effects/data/shaders/multieffect_cmb2.frag.qsb
deleted file mode 100644
index 7f040f6b1a..0000000000
--- a/src/effects/data/shaders/multieffect_cmb2.frag.qsb
+++ /dev/null
Binary files differ
diff --git a/src/effects/data/shaders/multieffect_cmb3.frag.qsb b/src/effects/data/shaders/multieffect_cmb3.frag.qsb
deleted file mode 100644
index 13700a6c0c..0000000000
--- a/src/effects/data/shaders/multieffect_cmb3.frag.qsb
+++ /dev/null
Binary files differ
diff --git a/src/effects/data/shaders/multieffect_cmbs1.frag.qsb b/src/effects/data/shaders/multieffect_cmbs1.frag.qsb
deleted file mode 100644
index 8f551a2fd4..0000000000
--- a/src/effects/data/shaders/multieffect_cmbs1.frag.qsb
+++ /dev/null
Binary files differ
diff --git a/src/effects/data/shaders/multieffect_cmbs2.frag.qsb b/src/effects/data/shaders/multieffect_cmbs2.frag.qsb
deleted file mode 100644
index 23496052da..0000000000
--- a/src/effects/data/shaders/multieffect_cmbs2.frag.qsb
+++ /dev/null
Binary files differ
diff --git a/src/effects/data/shaders/multieffect_cmbs3.frag.qsb b/src/effects/data/shaders/multieffect_cmbs3.frag.qsb
deleted file mode 100644
index 14beb5200f..0000000000
--- a/src/effects/data/shaders/multieffect_cmbs3.frag.qsb
+++ /dev/null
Binary files differ
diff --git a/src/effects/data/shaders/multieffect_cms0.frag.qsb b/src/effects/data/shaders/multieffect_cms0.frag.qsb
deleted file mode 100644
index c064df1dcf..0000000000
--- a/src/effects/data/shaders/multieffect_cms0.frag.qsb
+++ /dev/null
Binary files differ
diff --git a/src/effects/data/shaders/multieffect_cms1.frag.qsb b/src/effects/data/shaders/multieffect_cms1.frag.qsb
deleted file mode 100644
index b3f91d5f84..0000000000
--- a/src/effects/data/shaders/multieffect_cms1.frag.qsb
+++ /dev/null
Binary files differ
diff --git a/src/effects/data/shaders/multieffect_cms2.frag.qsb b/src/effects/data/shaders/multieffect_cms2.frag.qsb
deleted file mode 100644
index 85b1d179b2..0000000000
--- a/src/effects/data/shaders/multieffect_cms2.frag.qsb
+++ /dev/null
Binary files differ
diff --git a/src/effects/data/shaders/multieffect_cms3.frag.qsb b/src/effects/data/shaders/multieffect_cms3.frag.qsb
deleted file mode 100644
index 440bb16fe0..0000000000
--- a/src/effects/data/shaders/multieffect_cms3.frag.qsb
+++ /dev/null
Binary files differ
diff --git a/src/effects/data/shaders/multieffect_cs.vert.qsb b/src/effects/data/shaders/multieffect_cs.vert.qsb
deleted file mode 100644
index 2e1cce7fde..0000000000
--- a/src/effects/data/shaders/multieffect_cs.vert.qsb
+++ /dev/null
Binary files differ
diff --git a/src/effects/data/shaders/multieffect_cs0.frag.qsb b/src/effects/data/shaders/multieffect_cs0.frag.qsb
deleted file mode 100644
index 994a9ac973..0000000000
--- a/src/effects/data/shaders/multieffect_cs0.frag.qsb
+++ /dev/null
Binary files differ
diff --git a/src/effects/data/shaders/multieffect_cs1.frag.qsb b/src/effects/data/shaders/multieffect_cs1.frag.qsb
deleted file mode 100644
index d6a2071e32..0000000000
--- a/src/effects/data/shaders/multieffect_cs1.frag.qsb
+++ /dev/null
Binary files differ
diff --git a/src/effects/data/shaders/multieffect_cs2.frag.qsb b/src/effects/data/shaders/multieffect_cs2.frag.qsb
deleted file mode 100644
index 3b8fb53f84..0000000000
--- a/src/effects/data/shaders/multieffect_cs2.frag.qsb
+++ /dev/null
Binary files differ
diff --git a/src/effects/data/shaders/multieffect_cs3.frag.qsb b/src/effects/data/shaders/multieffect_cs3.frag.qsb
deleted file mode 100644
index 872a993fdd..0000000000
--- a/src/effects/data/shaders/multieffect_cs3.frag.qsb
+++ /dev/null
Binary files differ
diff --git a/src/effects/qgfxsourceproxy_p.h b/src/effects/qgfxsourceproxy_p.h
index ef22e17027..600f750ad8 100644
--- a/src/effects/qgfxsourceproxy_p.h
+++ b/src/effects/qgfxsourceproxy_p.h
@@ -26,12 +26,11 @@ class QQuickShaderEffectSource;
class QGfxSourceProxy : public QQuickItem
{
Q_OBJECT
- Q_PROPERTY(QQuickItem *input READ input WRITE setInput NOTIFY inputChanged RESET resetInput)
- Q_PROPERTY(QQuickItem *output READ output NOTIFY outputChanged)
- Q_PROPERTY(QRectF sourceRect READ sourceRect WRITE setSourceRect NOTIFY sourceRectChanged)
- Q_PROPERTY(bool active READ isActive NOTIFY activeChanged)
- Q_PROPERTY(Interpolation interpolation READ interpolation WRITE setInterpolation NOTIFY interpolationChanged)
- Q_ENUMS(Interpolation)
+ Q_PROPERTY(QQuickItem *input READ input WRITE setInput NOTIFY inputChanged RESET resetInput FINAL)
+ Q_PROPERTY(QQuickItem *output READ output NOTIFY outputChanged FINAL)
+ Q_PROPERTY(QRectF sourceRect READ sourceRect WRITE setSourceRect NOTIFY sourceRectChanged FINAL)
+ Q_PROPERTY(bool active READ isActive NOTIFY activeChanged FINAL)
+ Q_PROPERTY(Interpolation interpolation READ interpolation WRITE setInterpolation NOTIFY interpolationChanged FINAL)
public:
enum class Interpolation {
@@ -39,6 +38,7 @@ public:
Nearest,
Linear
};
+ Q_ENUM(Interpolation)
QGfxSourceProxy(QQuickItem *parentItem = nullptr);
~QGfxSourceProxy();
diff --git a/src/effects/qquickmultieffect.cpp b/src/effects/qquickmultieffect.cpp
index 14e9a4ee45..7561649fbf 100644
--- a/src/effects/qquickmultieffect.cpp
+++ b/src/effects/qquickmultieffect.cpp
@@ -11,6 +11,7 @@ QT_BEGIN_NAMESPACE
Q_LOGGING_CATEGORY(lcQuickEffect, "qt.quick.effects")
/*!
+ \keyword Qt Quick Effects
\qmlmodule QtQuick.Effects
\title Qt Quick Effects QML Types
\ingroup qmlmodules
@@ -31,11 +32,13 @@ Q_LOGGING_CATEGORY(lcQuickEffect, "qt.quick.effects")
\ingroup qtquick-effects
\brief Applies post-processing effect to an item.
- The MultiEffect type applies a post-processing effect to \l source item.
- Compared to \c {Qt Graphical Effects} module, MultiEffect combines multiple
- effects (blur, shadow, colorization etc.) into a single item and shader which
- makes it better for multiple effects. There are several shader variations
- and the most optimal one gets selected based on the features used.
+ The MultiEffect type, the successor to the deprecated Qt Graphical Effects
+ from Qt 5, applies a post-processing effect to the \l source item. Compared
+ to the Qt Graphical Effects module, MultiEffect combines multiple
+ effects (blur, shadow, colorization etc.) into a single item and shader
+ which makes it better for multiple effects. There are several shader
+ variations and the most optimal one gets selected based on the features
+ used.
MultiEffect is designed specifically for most common effects and can be easily animated.
If the MultiEffect doesn't contain the effect you need, consider implementing a custom
@@ -147,7 +150,7 @@ Q_LOGGING_CATEGORY(lcQuickEffect, "qt.quick.effects")
*/
/*!
- \qmlsignal QtQuick::MultiEffect::shaderChanged()
+ \qmlsignal QtQuick.Effects::MultiEffect::shaderChanged()
This signal is emitted when the used shader changes.
\sa fragmentShader, vertexShader
@@ -164,7 +167,7 @@ QQuickMultiEffect::~QQuickMultiEffect()
}
/*!
- \qmlproperty Item QtQuick::MultiEffect::source
+ \qmlproperty Item QtQuick.Effects::MultiEffect::source
This property holds the item to be used as a source for the effect.
If needed, MultiEffect will internally generate a \l ShaderEffectSource
@@ -173,6 +176,11 @@ QQuickMultiEffect::~QQuickMultiEffect()
\note It is not supported to let the effect include itself, for instance
by setting source to the effect's parent.
+ \note If the source item has \l {QtQuick::Item::layer.enabled} {layer.enabled} set to true,
+ it will be used directly. This is good for the performance and often desired, when the source
+ is hidden. But if the source remains visible and the effect adds padding (autoPaddingEnabled,
+ paddingRect), that padding can affect the appearance of the source item.
+
\sa hasProxySource
*/
QQuickItem *QQuickMultiEffect::source() const
@@ -188,7 +196,7 @@ void QQuickMultiEffect::setSource(QQuickItem *item)
}
/*!
- \qmlproperty bool QtQuick::MultiEffect::autoPaddingEnabled
+ \qmlproperty bool QtQuick.Effects::MultiEffect::autoPaddingEnabled
When blur or shadow effects are enabled and this is set to true (default),
the item size is padded automatically based on blurMax and blurMultiplier.
@@ -215,7 +223,7 @@ void QQuickMultiEffect::setAutoPaddingEnabled(bool enabled)
}
/*!
- \qmlproperty rect QtQuick::MultiEffect::paddingRect
+ \qmlproperty rect QtQuick.Effects::MultiEffect::paddingRect
Set this to increase item size manually so that blur and/or shadows will fit.
If autoPaddingEnabled is true and paddingRect is not set, the item is padded
@@ -247,7 +255,7 @@ void QQuickMultiEffect::setPaddingRect(const QRectF &rect)
}
/*!
- \qmlproperty real QtQuick::MultiEffect::brightness
+ \qmlproperty real QtQuick.Effects::MultiEffect::brightness
This property defines how much the source brightness is increased or
decreased.
@@ -268,7 +276,7 @@ void QQuickMultiEffect::setBrightness(qreal brightness)
}
/*!
- \qmlproperty real QtQuick::MultiEffect::contrast
+ \qmlproperty real QtQuick.Effects::MultiEffect::contrast
This property defines how much the source contrast is increased or
decreased.
@@ -289,7 +297,7 @@ void QQuickMultiEffect::setContrast(qreal contrast)
}
/*!
- \qmlproperty real QtQuick::MultiEffect::saturation
+ \qmlproperty real QtQuick.Effects::MultiEffect::saturation
This property defines how much the source saturation is increased or
decreased.
@@ -310,7 +318,7 @@ void QQuickMultiEffect::setSaturation(qreal saturation)
}
/*!
- \qmlproperty real QtQuick::MultiEffect::colorization
+ \qmlproperty real QtQuick.Effects::MultiEffect::colorization
This property defines how much the source is colorized with the
colorizationColor.
@@ -331,7 +339,7 @@ void QQuickMultiEffect::setColorization(qreal colorization)
}
/*!
- \qmlproperty color QtQuick::MultiEffect::colorizationColor
+ \qmlproperty color QtQuick.Effects::MultiEffect::colorizationColor
This property defines the RGBA color value which is used to
colorize the source.
@@ -353,7 +361,7 @@ void QQuickMultiEffect::setColorizationColor(const QColor &color)
}
/*!
- \qmlproperty bool QtQuick::MultiEffect::blurEnabled
+ \qmlproperty bool QtQuick.Effects::MultiEffect::blurEnabled
Enables the blur effect.
@@ -372,7 +380,7 @@ void QQuickMultiEffect::setBlurEnabled(bool enabled)
}
/*!
- \qmlproperty real QtQuick::MultiEffect::blur
+ \qmlproperty real QtQuick.Effects::MultiEffect::blur
This property defines how much blur (radius) is applied to the source.
@@ -397,7 +405,7 @@ void QQuickMultiEffect::setBlur(qreal blur)
}
/*!
- \qmlproperty int QtQuick::MultiEffect::blurMax
+ \qmlproperty int QtQuick.Effects::MultiEffect::blurMax
This property defines the maximum pixel radius that blur with value
1.0 will reach.
@@ -425,7 +433,7 @@ void QQuickMultiEffect::setBlurMax(int blurMax)
}
/*!
- \qmlproperty real QtQuick::MultiEffect::blurMultiplier
+ \qmlproperty real QtQuick.Effects::MultiEffect::blurMultiplier
This property defines a multiplier for extending the blur radius.
@@ -452,7 +460,7 @@ void QQuickMultiEffect::setBlurMultiplier(qreal blurMultiplier)
}
/*!
- \qmlproperty bool QtQuick::MultiEffect::shadowEnabled
+ \qmlproperty bool QtQuick.Effects::MultiEffect::shadowEnabled
Enables the shadow effect.
@@ -471,7 +479,7 @@ void QQuickMultiEffect::setShadowEnabled(bool enabled)
}
/*!
- \qmlproperty real QtQuick::MultiEffect::shadowOpacity
+ \qmlproperty real QtQuick.Effects::MultiEffect::shadowOpacity
This property defines the opacity of the drop shadow. This value
is multiplied with the \c shadowColor alpha value.
@@ -492,7 +500,7 @@ void QQuickMultiEffect::setShadowOpacity(qreal shadowOpacity)
}
/*!
- \qmlproperty real QtQuick::MultiEffect::shadowBlur
+ \qmlproperty real QtQuick.Effects::MultiEffect::shadowBlur
This property defines how much blur (radius) is applied to the shadow.
@@ -517,7 +525,7 @@ void QQuickMultiEffect::setShadowBlur(qreal shadowBlur)
}
/*!
- \qmlproperty real QtQuick::MultiEffect::shadowHorizontalOffset
+ \qmlproperty real QtQuick.Effects::MultiEffect::shadowHorizontalOffset
This property defines the horizontal offset of the shadow from the
item center.
@@ -542,7 +550,7 @@ void QQuickMultiEffect::setShadowHorizontalOffset(qreal offset)
}
/*!
- \qmlproperty real QtQuick::MultiEffect::shadowVerticalOffset
+ \qmlproperty real QtQuick.Effects::MultiEffect::shadowVerticalOffset
This property defines the vertical offset of the shadow from the
item center.
@@ -567,7 +575,7 @@ void QQuickMultiEffect::setShadowVerticalOffset(qreal offset)
}
/*!
- \qmlproperty color QtQuick::MultiEffect::shadowColor
+ \qmlproperty color QtQuick.Effects::MultiEffect::shadowColor
This property defines the RGBA color value which is used for
the shadow. It is useful for example when a shadow is used for
@@ -589,7 +597,7 @@ void QQuickMultiEffect::setShadowColor(const QColor &color)
}
/*!
- \qmlproperty real QtQuick::MultiEffect::shadowScale
+ \qmlproperty real QtQuick.Effects::MultiEffect::shadowScale
This property defines the scale of the shadow. Scaling is applied from
the center of the item.
@@ -614,7 +622,7 @@ void QQuickMultiEffect::setShadowScale(qreal shadowScale)
}
/*!
- \qmlproperty bool QtQuick::MultiEffect::maskEnabled
+ \qmlproperty bool QtQuick.Effects::MultiEffect::maskEnabled
Enables the mask effect.
@@ -633,7 +641,7 @@ void QQuickMultiEffect::setMaskEnabled(bool enabled)
}
/*!
- \qmlproperty Item QtQuick::MultiEffect::maskSource
+ \qmlproperty Item QtQuick.Effects::MultiEffect::maskSource
Source item for the mask effect. Should point to ShaderEffectSource,
item with \l {QtQuick::Item::layer.enabled} {layer.enabled} set to \c true,
@@ -653,7 +661,7 @@ void QQuickMultiEffect::setMaskSource(QQuickItem *item)
}
/*!
- \qmlproperty real QtQuick::MultiEffect::maskThresholdMin
+ \qmlproperty real QtQuick.Effects::MultiEffect::maskThresholdMin
This property defines a lower threshold value for the mask pixels.
The mask pixels that have an alpha value below this property are used
@@ -677,7 +685,7 @@ void QQuickMultiEffect::setMaskThresholdMin(qreal threshold)
}
/*!
- \qmlproperty real QtQuick::MultiEffect::maskSpreadAtMin
+ \qmlproperty real QtQuick.Effects::MultiEffect::maskSpreadAtMin
This property defines the smoothness of the mask edges near the
maskThresholdMin. Setting higher spread values softens the transition
@@ -700,7 +708,7 @@ void QQuickMultiEffect::setMaskSpreadAtMin(qreal spread)
}
/*!
- \qmlproperty real QtQuick::MultiEffect::maskThresholdMax
+ \qmlproperty real QtQuick.Effects::MultiEffect::maskThresholdMax
This property defines an upper threshold value for the mask pixels.
The mask pixels that have an alpha value below this property are used
@@ -724,7 +732,7 @@ void QQuickMultiEffect::setMaskThresholdMax(qreal threshold)
}
/*!
- \qmlproperty real QtQuick::MultiEffect::maskSpreadAtMax
+ \qmlproperty real QtQuick.Effects::MultiEffect::maskSpreadAtMax
This property defines the smoothness of the mask edges near the
maskThresholdMax. Using higher spread values softens the transition
@@ -747,7 +755,7 @@ void QQuickMultiEffect::setMaskSpreadAtMax(qreal spread)
}
/*!
- \qmlproperty bool QtQuick::MultiEffect::maskInverted
+ \qmlproperty bool QtQuick.Effects::MultiEffect::maskInverted
This property switches the mask to the opposite side; instead of
masking away the content outside maskThresholdMin and maskThresholdMax,
@@ -768,7 +776,8 @@ void QQuickMultiEffect::setMaskInverted(bool inverted)
}
/*!
- \qmlproperty rect QtQuick::MultiEffect::itemRect
+ \qmlproperty rect QtQuick.Effects::MultiEffect::itemRect
+ \readonly
Read-only access to effect item rectangle. This can be used e.g. to see
the area item covers.
@@ -782,7 +791,7 @@ QRectF QQuickMultiEffect::itemRect() const
}
/*!
- \qmlproperty string QtQuick::MultiEffect::fragmentShader
+ \qmlproperty string QtQuick.Effects::MultiEffect::fragmentShader
\readonly
Read-only access to filename of the currently used fragment shader.
@@ -794,7 +803,7 @@ QString QQuickMultiEffect::fragmentShader() const
}
/*!
- \qmlproperty string QtQuick::MultiEffect::vertexShader
+ \qmlproperty string QtQuick.Effects::MultiEffect::vertexShader
\readonly
Read-only access to filename of the currently used vertex shader.
@@ -806,7 +815,7 @@ QString QQuickMultiEffect::vertexShader() const
}
/*!
- \qmlproperty bool QtQuick::MultiEffect::hasProxySource
+ \qmlproperty bool QtQuick.Effects::MultiEffect::hasProxySource
\readonly
Returns true when the MultiEffect internally creates \l ShaderEffectSource
@@ -1490,9 +1499,11 @@ void QQuickMultiEffectPrivate::updateColorizationColor()
if (!m_shaderEffect)
return;
- int alpha = std::clamp(int(m_colorizationColor.alpha() * m_colorization), 0, 255);
- QColor colorizationColor = m_colorizationColor;
- colorizationColor.setAlpha(alpha);
+ float alpha = std::clamp(float(m_colorizationColor.alphaF() * m_colorization), 0.0f, 1.0f);
+ QVector4D colorizationColor(m_colorizationColor.redF(),
+ m_colorizationColor.greenF(),
+ m_colorizationColor.blueF(),
+ alpha);
m_shaderEffect->setProperty("colorizationColor", colorizationColor);
}
@@ -1501,9 +1512,12 @@ void QQuickMultiEffectPrivate::updateShadowColor()
if (!m_shaderEffect)
return;
- int alpha = std::clamp(int(m_shadowColor.alpha() * m_shadowOpacity), 0, 255);
- QColor shadowColor = m_shadowColor;
- shadowColor.setAlpha(alpha);
+ float alpha = std::clamp(float(m_shadowColor.alphaF() * m_shadowOpacity), 0.0f, 1.0f);
+ QVector4D shadowColor(m_shadowColor.redF(),
+ m_shadowColor.greenF(),
+ m_shadowColor.blueF(),
+ alpha);
+
m_shaderEffect->setProperty("shadowColor", shadowColor);
}
@@ -1558,8 +1572,8 @@ void QQuickMultiEffectPrivate::updateBlurItemSizes(bool forceUpdate)
// First blur item size to be half of th source item
// extended size, rounded to next divisible by 16.
QSizeF sourceSize = itemRect().size();
- QSizeF firstItemSize(std::ceil(sourceSize.width() / 32) * 16,
- std::ceil(sourceSize.height() / 32) * 16);
+ QSizeF firstItemSize(std::ceil(sourceSize.width() / 16) * 8,
+ std::ceil(sourceSize.height() / 16) * 8);
if (!forceUpdate && m_firstBlurItemSize == firstItemSize)
return;
@@ -1582,7 +1596,7 @@ void QQuickMultiEffectPrivate::updateBlurItemSizes(bool forceUpdate)
void QQuickMultiEffectPrivate::updateEffectShaders()
{
Q_Q(QQuickMultiEffect);
- if (!q->isComponentComplete())
+ if (!q->isComponentComplete() || !m_shaderEffect)
return;
QString vShader = QStringLiteral("multieffect_c");
@@ -1649,6 +1663,10 @@ void QQuickMultiEffectPrivate::updateBlurItemsAmount(int blurLevel)
if (!m_shaderEffect)
return;
+ const auto engine = qmlEngine(q);
+ if (!engine)
+ return;
+
// Lowest blur level uses 3 items, highest 5 items.
int itemsAmount = blurLevel == 0 ? 0 : blurLevel + 2;
@@ -1656,7 +1674,6 @@ void QQuickMultiEffectPrivate::updateBlurItemsAmount(int blurLevel)
// Add more blur items.
// Note that by design blur items are only added and never reduced
// during the lifetime of the effect component.
- const auto engine = qmlEngine(q);
QUrl blurVs = QUrl(QStringLiteral("qrc:/data/shaders/bluritems.vert.qsb"));
QUrl blurFs = QUrl(QStringLiteral("qrc:/data/shaders/bluritems.frag.qsb"));
QQmlComponent blurComponent(engine, QUrl(QStringLiteral("qrc:/data/BlurItem.qml")));
@@ -1680,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.h b/src/effects/qquickmultieffect_p.h
index 1ba6143ac8..8438a0947b 100644
--- a/src/effects/qquickmultieffect_p.h
+++ b/src/effects/qquickmultieffect_p.h
@@ -29,7 +29,7 @@ QT_BEGIN_NAMESPACE
class QQuickMultiEffectPrivate;
-class Q_QUICKEFFECTS_PRIVATE_EXPORT QQuickMultiEffect : public QQuickItem
+class Q_QUICKEFFECTS_EXPORT QQuickMultiEffect : public QQuickItem
{
Q_OBJECT
Q_PROPERTY(QQuickItem *source READ source WRITE setSource NOTIFY sourceChanged)
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;
diff --git a/src/effects/qtquickeffectsglobal_p.h b/src/effects/qtquickeffectsglobal_p.h
index 9629624c36..09ea4fef23 100644
--- a/src/effects/qtquickeffectsglobal_p.h
+++ b/src/effects/qtquickeffectsglobal_p.h
@@ -16,6 +16,6 @@
//
#include <QtCore/qglobal.h>
-#include <QtQuickEffects/private/qtquickeffectsexports_p.h>
+#include <QtQuickEffects/qtquickeffectsexports.h>
#endif // QTQUICKEFFECTSGLOBAL_P_H