diff options
Diffstat (limited to 'src/effects')
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 Binary files differdeleted file mode 100644 index 61e85d0daa..0000000000 --- a/src/effects/data/shaders/bluritems.frag.qsb +++ /dev/null diff --git a/src/effects/data/shaders/bluritems.vert.qsb b/src/effects/data/shaders/bluritems.vert.qsb Binary files differdeleted file mode 100644 index 97020e2f27..0000000000 --- a/src/effects/data/shaders/bluritems.vert.qsb +++ /dev/null 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 Binary files differdeleted file mode 100644 index e95790de4d..0000000000 --- a/src/effects/data/shaders/multieffect_c.vert.qsb +++ /dev/null diff --git a/src/effects/data/shaders/multieffect_c0.frag.qsb b/src/effects/data/shaders/multieffect_c0.frag.qsb Binary files differdeleted file mode 100644 index d57768566d..0000000000 --- a/src/effects/data/shaders/multieffect_c0.frag.qsb +++ /dev/null diff --git a/src/effects/data/shaders/multieffect_cb1.frag.qsb b/src/effects/data/shaders/multieffect_cb1.frag.qsb Binary files differdeleted file mode 100644 index 5765ff7fa8..0000000000 --- a/src/effects/data/shaders/multieffect_cb1.frag.qsb +++ /dev/null diff --git a/src/effects/data/shaders/multieffect_cb2.frag.qsb b/src/effects/data/shaders/multieffect_cb2.frag.qsb Binary files differdeleted file mode 100644 index 8e5d1da445..0000000000 --- a/src/effects/data/shaders/multieffect_cb2.frag.qsb +++ /dev/null diff --git a/src/effects/data/shaders/multieffect_cb3.frag.qsb b/src/effects/data/shaders/multieffect_cb3.frag.qsb Binary files differdeleted file mode 100644 index 1dd589836f..0000000000 --- a/src/effects/data/shaders/multieffect_cb3.frag.qsb +++ /dev/null diff --git a/src/effects/data/shaders/multieffect_cbs1.frag.qsb b/src/effects/data/shaders/multieffect_cbs1.frag.qsb Binary files differdeleted file mode 100644 index bbcee6cb9d..0000000000 --- a/src/effects/data/shaders/multieffect_cbs1.frag.qsb +++ /dev/null diff --git a/src/effects/data/shaders/multieffect_cbs2.frag.qsb b/src/effects/data/shaders/multieffect_cbs2.frag.qsb Binary files differdeleted file mode 100644 index db04f68296..0000000000 --- a/src/effects/data/shaders/multieffect_cbs2.frag.qsb +++ /dev/null diff --git a/src/effects/data/shaders/multieffect_cbs3.frag.qsb b/src/effects/data/shaders/multieffect_cbs3.frag.qsb Binary files differdeleted file mode 100644 index a32d6446f2..0000000000 --- a/src/effects/data/shaders/multieffect_cbs3.frag.qsb +++ /dev/null diff --git a/src/effects/data/shaders/multieffect_cm0.frag.qsb b/src/effects/data/shaders/multieffect_cm0.frag.qsb Binary files differdeleted file mode 100644 index d29a83245a..0000000000 --- a/src/effects/data/shaders/multieffect_cm0.frag.qsb +++ /dev/null diff --git a/src/effects/data/shaders/multieffect_cmb1.frag.qsb b/src/effects/data/shaders/multieffect_cmb1.frag.qsb Binary files differdeleted file mode 100644 index 8c439307e2..0000000000 --- a/src/effects/data/shaders/multieffect_cmb1.frag.qsb +++ /dev/null diff --git a/src/effects/data/shaders/multieffect_cmb2.frag.qsb b/src/effects/data/shaders/multieffect_cmb2.frag.qsb Binary files differdeleted file mode 100644 index 7f040f6b1a..0000000000 --- a/src/effects/data/shaders/multieffect_cmb2.frag.qsb +++ /dev/null diff --git a/src/effects/data/shaders/multieffect_cmb3.frag.qsb b/src/effects/data/shaders/multieffect_cmb3.frag.qsb Binary files differdeleted file mode 100644 index 13700a6c0c..0000000000 --- a/src/effects/data/shaders/multieffect_cmb3.frag.qsb +++ /dev/null diff --git a/src/effects/data/shaders/multieffect_cmbs1.frag.qsb b/src/effects/data/shaders/multieffect_cmbs1.frag.qsb Binary files differdeleted file mode 100644 index 8f551a2fd4..0000000000 --- a/src/effects/data/shaders/multieffect_cmbs1.frag.qsb +++ /dev/null diff --git a/src/effects/data/shaders/multieffect_cmbs2.frag.qsb b/src/effects/data/shaders/multieffect_cmbs2.frag.qsb Binary files differdeleted file mode 100644 index 23496052da..0000000000 --- a/src/effects/data/shaders/multieffect_cmbs2.frag.qsb +++ /dev/null diff --git a/src/effects/data/shaders/multieffect_cmbs3.frag.qsb b/src/effects/data/shaders/multieffect_cmbs3.frag.qsb Binary files differdeleted file mode 100644 index 14beb5200f..0000000000 --- a/src/effects/data/shaders/multieffect_cmbs3.frag.qsb +++ /dev/null diff --git a/src/effects/data/shaders/multieffect_cms0.frag.qsb b/src/effects/data/shaders/multieffect_cms0.frag.qsb Binary files differdeleted file mode 100644 index c064df1dcf..0000000000 --- a/src/effects/data/shaders/multieffect_cms0.frag.qsb +++ /dev/null diff --git a/src/effects/data/shaders/multieffect_cms1.frag.qsb b/src/effects/data/shaders/multieffect_cms1.frag.qsb Binary files differdeleted file mode 100644 index b3f91d5f84..0000000000 --- a/src/effects/data/shaders/multieffect_cms1.frag.qsb +++ /dev/null diff --git a/src/effects/data/shaders/multieffect_cms2.frag.qsb b/src/effects/data/shaders/multieffect_cms2.frag.qsb Binary files differdeleted file mode 100644 index 85b1d179b2..0000000000 --- a/src/effects/data/shaders/multieffect_cms2.frag.qsb +++ /dev/null diff --git a/src/effects/data/shaders/multieffect_cms3.frag.qsb b/src/effects/data/shaders/multieffect_cms3.frag.qsb Binary files differdeleted file mode 100644 index 440bb16fe0..0000000000 --- a/src/effects/data/shaders/multieffect_cms3.frag.qsb +++ /dev/null diff --git a/src/effects/data/shaders/multieffect_cs.vert.qsb b/src/effects/data/shaders/multieffect_cs.vert.qsb Binary files differdeleted file mode 100644 index 2e1cce7fde..0000000000 --- a/src/effects/data/shaders/multieffect_cs.vert.qsb +++ /dev/null diff --git a/src/effects/data/shaders/multieffect_cs0.frag.qsb b/src/effects/data/shaders/multieffect_cs0.frag.qsb Binary files differdeleted file mode 100644 index 994a9ac973..0000000000 --- a/src/effects/data/shaders/multieffect_cs0.frag.qsb +++ /dev/null diff --git a/src/effects/data/shaders/multieffect_cs1.frag.qsb b/src/effects/data/shaders/multieffect_cs1.frag.qsb Binary files differdeleted file mode 100644 index d6a2071e32..0000000000 --- a/src/effects/data/shaders/multieffect_cs1.frag.qsb +++ /dev/null diff --git a/src/effects/data/shaders/multieffect_cs2.frag.qsb b/src/effects/data/shaders/multieffect_cs2.frag.qsb Binary files differdeleted file mode 100644 index 3b8fb53f84..0000000000 --- a/src/effects/data/shaders/multieffect_cs2.frag.qsb +++ /dev/null diff --git a/src/effects/data/shaders/multieffect_cs3.frag.qsb b/src/effects/data/shaders/multieffect_cs3.frag.qsb Binary files differdeleted file mode 100644 index 872a993fdd..0000000000 --- a/src/effects/data/shaders/multieffect_cs3.frag.qsb +++ /dev/null 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 |