aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEirik Aavitsland <eirik.aavitsland@qt.io>2020-05-28 14:21:52 +0200
committerEirik Aavitsland <eirik.aavitsland@qt.io>2020-06-02 11:15:44 +0200
commitff293f3afc0a9fe892124af4a10d29f2410569e4 (patch)
treef4200a4be4fab1252184d9db58bd874f76da3063
parent0d0f6ab80349963f3aaa387992b0edfadddb62a4 (diff)
Remove CustomParticle
The implementation is intertwined with the direct GL path and not really portable to RHI. Fixes: QTBUG-78574 Change-Id: I6ac8707544c19a24661f07e0e6d2fc405e49cbff Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
-rw-r--r--examples/quick/particles/.prev_CMakeLists.txt1
-rw-r--r--examples/quick/particles/CMakeLists.txt1
-rw-r--r--examples/quick/particles/customparticle/CMakeLists.txt259
-rw-r--r--examples/quick/particles/customparticle/content/blurparticles.qml152
-rw-r--r--examples/quick/particles/customparticle/content/fragmentshader.qml126
-rw-r--r--examples/quick/particles/customparticle/content/imagecolors.qml136
-rw-r--r--examples/quick/particles/customparticle/customparticle.pro12
-rw-r--r--examples/quick/particles/customparticle/customparticle.qml66
-rw-r--r--examples/quick/particles/customparticle/customparticle.qmlproject16
-rw-r--r--examples/quick/particles/customparticle/customparticle.qrc8
-rw-r--r--examples/quick/particles/customparticle/doc/images/qml-customparticle-example.pngbin123781 -> 0 bytes
-rw-r--r--examples/quick/particles/customparticle/doc/src/customparticle.qdoc54
-rw-r--r--examples/quick/particles/customparticle/main.cpp51
-rw-r--r--examples/quick/particles/particles.pro1
-rw-r--r--src/particles/CMakeLists.txt11
-rw-r--r--src/particles/particles.pri14
-rw-r--r--src/particles/particles.qrc6
-rw-r--r--src/particles/qquickcustomparticle.cpp465
-rw-r--r--src/particles/qquickcustomparticle_p.h127
-rw-r--r--src/particles/qquickparticlesmodule.cpp3
-rw-r--r--src/particles/qquickparticlesystem.cpp2
-rw-r--r--src/particles/qquickparticlesystem_p.h5
-rw-r--r--src/particles/qquickv4particledata.cpp2
-rw-r--r--src/particles/shaders/customparticle.frag11
-rw-r--r--src/particles/shaders/customparticle.vert4
-rw-r--r--src/particles/shaders/customparticle_core.frag13
-rw-r--r--src/particles/shaders/customparticle_core.vert4
-rw-r--r--src/particles/shaders/customparticletemplate.vert28
-rw-r--r--src/particles/shaders/customparticletemplate_core.vert28
-rw-r--r--src/quick/doc/src/concepts/effects/particles.qdoc7
-rw-r--r--src/quick/items/qquickopenglshadereffect_p.h2
-rw-r--r--tests/auto/guiapplauncher/examples.txt1
-rw-r--r--tests/auto/particles/CMakeLists.txt1
-rw-r--r--tests/auto/particles/particles.pro1
-rw-r--r--tests/auto/particles/qquickcustomparticle/CMakeLists.txt40
-rw-r--r--tests/auto/particles/qquickcustomparticle/data/basic.qml58
-rw-r--r--tests/auto/particles/qquickcustomparticle/data/deleteSourceItem.qml68
-rw-r--r--tests/auto/particles/qquickcustomparticle/qquickcustomparticle.pro10
-rw-r--r--tests/auto/particles/qquickcustomparticle/tst_qquickcustomparticle.cpp101
39 files changed, 4 insertions, 1891 deletions
diff --git a/examples/quick/particles/.prev_CMakeLists.txt b/examples/quick/particles/.prev_CMakeLists.txt
index 9bc4e894a5..1dbf49be21 100644
--- a/examples/quick/particles/.prev_CMakeLists.txt
+++ b/examples/quick/particles/.prev_CMakeLists.txt
@@ -1,7 +1,6 @@
# Generated from particles.pro.
add_subdirectory(affectors)
-add_subdirectory(customparticle)
add_subdirectory(emitters)
add_subdirectory(imageparticle)
add_subdirectory(itemparticle)
diff --git a/examples/quick/particles/CMakeLists.txt b/examples/quick/particles/CMakeLists.txt
index 9bc4e894a5..1dbf49be21 100644
--- a/examples/quick/particles/CMakeLists.txt
+++ b/examples/quick/particles/CMakeLists.txt
@@ -1,7 +1,6 @@
# Generated from particles.pro.
add_subdirectory(affectors)
-add_subdirectory(customparticle)
add_subdirectory(emitters)
add_subdirectory(imageparticle)
add_subdirectory(itemparticle)
diff --git a/examples/quick/particles/customparticle/CMakeLists.txt b/examples/quick/particles/customparticle/CMakeLists.txt
deleted file mode 100644
index 0a7ef103d4..0000000000
--- a/examples/quick/particles/customparticle/CMakeLists.txt
+++ /dev/null
@@ -1,259 +0,0 @@
-# Generated from customparticle.pro.
-
-cmake_minimum_required(VERSION 3.14)
-project(customparticle LANGUAGES CXX)
-
-set(CMAKE_INCLUDE_CURRENT_DIR ON)
-
-set(CMAKE_AUTOMOC ON)
-set(CMAKE_AUTORCC ON)
-set(CMAKE_AUTOUIC ON)
-
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/quick/particles/customparticle")
-
-find_package(Qt6 COMPONENTS Core)
-find_package(Qt6 COMPONENTS Gui)
-find_package(Qt6 COMPONENTS Quick)
-find_package(Qt6 COMPONENTS Qml)
-
-add_qt_gui_executable(customparticle
- main.cpp
-)
-target_link_libraries(customparticle PUBLIC
- Qt::Core
- Qt::Gui
- Qt::Qml
- Qt::Quick
-)
-
-
-# Resources:
-set(customparticle_resource_files
- "content/blurparticles.qml"
- "content/fragmentshader.qml"
- "content/imagecolors.qml"
- "customparticle.qml"
-)
-
-qt6_add_resources(customparticle "customparticle"
- PREFIX
- "/particles/customparticle"
- FILES
- ${customparticle_resource_files}
-)
-set_source_files_properties("../images/_explo.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/_explo.png"
-)
-set_source_files_properties("../images/backgroundLeaves.jpg"
- PROPERTIES QT_RESOURCE_ALIAS "images/backgroundLeaves.jpg"
-)
-set_source_files_properties("../images/bear_tiles.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/bear_tiles.png"
-)
-set_source_files_properties("../images/candle.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/candle.png"
-)
-set_source_files_properties("../images/colortable.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/colortable.png"
-)
-set_source_files_properties("../images/finalfrontier.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/finalfrontier.png"
-)
-set_source_files_properties("../images/flower.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/flower.png"
-)
-set_source_files_properties("../images/matchmask.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/matchmask.png"
-)
-set_source_files_properties("../images/meteor.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/meteor.png"
-)
-set_source_files_properties("../images/meteor_explo.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/meteor_explo.png"
-)
-set_source_files_properties("../images/meteors.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/meteors.png"
-)
-set_source_files_properties("../images/nullRock.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/nullRock.png"
-)
-set_source_files_properties("../images/particle2.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/particle2.png"
-)
-set_source_files_properties("../images/particle3.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/particle3.png"
-)
-set_source_files_properties("../images/particleA.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/particleA.png"
-)
-set_source_files_properties("../images/portal_bg.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/portal_bg.png"
-)
-set_source_files_properties("../images/realLeaf1.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/realLeaf1.png"
-)
-set_source_files_properties("../images/realLeaf2.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/realLeaf2.png"
-)
-set_source_files_properties("../images/realLeaf3.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/realLeaf3.png"
-)
-set_source_files_properties("../images/realLeaf4.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/realLeaf4.png"
-)
-set_source_files_properties("../images/rocket.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/rocket.png"
-)
-set_source_files_properties("../images/rocket2.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/rocket2.png"
-)
-set_source_files_properties("../images/sizeInOut.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/sizeInOut.png"
-)
-set_source_files_properties("../images/snowflake.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/snowflake.png"
-)
-set_source_files_properties("../images/sparkleSize.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/sparkleSize.png"
-)
-set_source_files_properties("../images/starfish_0.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/starfish_0.png"
-)
-set_source_files_properties("../images/starfish_1.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/starfish_1.png"
-)
-set_source_files_properties("../images/starfish_2.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/starfish_2.png"
-)
-set_source_files_properties("../images/starfish_3.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/starfish_3.png"
-)
-set_source_files_properties("../images/starfish_4.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/starfish_4.png"
-)
-set_source_files_properties("../images/starfish_mask.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/starfish_mask.png"
-)
-set(images_resource_files
- "images/_explo.png"
- "images/backgroundLeaves.jpg"
- "images/bear_tiles.png"
- "images/candle.png"
- "images/colortable.png"
- "images/finalfrontier.png"
- "images/flower.png"
- "images/matchmask.png"
- "images/meteor.png"
- "images/meteor_explo.png"
- "images/meteors.png"
- "images/nullRock.png"
- "images/particle2.png"
- "images/particle3.png"
- "images/particleA.png"
- "images/portal_bg.png"
- "images/realLeaf1.png"
- "images/realLeaf2.png"
- "images/realLeaf3.png"
- "images/realLeaf4.png"
- "images/rocket.png"
- "images/rocket2.png"
- "images/sizeInOut.png"
- "images/snowflake.png"
- "images/sparkleSize.png"
- "images/starfish_0.png"
- "images/starfish_1.png"
- "images/starfish_2.png"
- "images/starfish_3.png"
- "images/starfish_4.png"
- "images/starfish_mask.png"
-)
-
-qt6_add_resources(customparticle "images"
- PREFIX
- "/particles"
- BASE
- ".."
- FILES
- ${images_resource_files}
-)
-set_source_files_properties("../../shared/Button.qml"
- PROPERTIES QT_RESOURCE_ALIAS "Button.qml"
-)
-set_source_files_properties("../../shared/CheckBox.qml"
- PROPERTIES QT_RESOURCE_ALIAS "CheckBox.qml"
-)
-set_source_files_properties("../../shared/FlickrRssModel.qml"
- PROPERTIES QT_RESOURCE_ALIAS "FlickrRssModel.qml"
-)
-set_source_files_properties("../../shared/Label.qml"
- PROPERTIES QT_RESOURCE_ALIAS "Label.qml"
-)
-set_source_files_properties("../../shared/LauncherList.qml"
- PROPERTIES QT_RESOURCE_ALIAS "LauncherList.qml"
-)
-set_source_files_properties("../../shared/SimpleLauncherDelegate.qml"
- PROPERTIES QT_RESOURCE_ALIAS "SimpleLauncherDelegate.qml"
-)
-set_source_files_properties("../../shared/Slider.qml"
- PROPERTIES QT_RESOURCE_ALIAS "Slider.qml"
-)
-set_source_files_properties("../../shared/TabSet.qml"
- PROPERTIES QT_RESOURCE_ALIAS "TabSet.qml"
-)
-set_source_files_properties("../../shared/TextField.qml"
- PROPERTIES QT_RESOURCE_ALIAS "TextField.qml"
-)
-set_source_files_properties("../../shared/images/back.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/back.png"
-)
-set_source_files_properties("../../shared/images/checkmark.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/checkmark.png"
-)
-set_source_files_properties("../../shared/images/next.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/next.png"
-)
-set_source_files_properties("../../shared/images/qt-logo.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/qt-logo.png"
-)
-set_source_files_properties("../../shared/images/slider_handle.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/slider_handle.png"
-)
-set_source_files_properties("../../shared/images/tab.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/tab.png"
-)
-set(shared_resource_files
- "Button.qml"
- "CheckBox.qml"
- "FlickrRssModel.qml"
- "Label.qml"
- "LauncherList.qml"
- "SimpleLauncherDelegate.qml"
- "Slider.qml"
- "TabSet.qml"
- "TextField.qml"
- "images/back.png"
- "images/checkmark.png"
- "images/next.png"
- "images/qt-logo.png"
- "images/slider_handle.png"
- "images/tab.png"
-)
-
-qt6_add_resources(customparticle "shared"
- PREFIX
- "/shared"
- BASE
- "../../shared"
- FILES
- ${shared_resource_files}
-)
-
-install(TARGETS customparticle
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
-)
diff --git a/examples/quick/particles/customparticle/content/blurparticles.qml b/examples/quick/particles/customparticle/content/blurparticles.qml
deleted file mode 100644
index f72b858895..0000000000
--- a/examples/quick/particles/customparticle/content/blurparticles.qml
+++ /dev/null
@@ -1,152 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-import QtQuick.Particles 2.0
-
-Rectangle {
- color: "white"
- width: 240
- height: 360
- ParticleSystem {
- id: sys
- }
- Emitter {
- system:sys
- height: parent.height
- emitRate: 1
- lifeSpan: 12000
- velocity: PointDirection {x:20;}
- size: 128
- }
- ShaderEffectSource {
- id: theSource
- sourceItem: theItem
- hideSource: true
- }
- Image {
- id: theItem
- source: "../../images/starfish_1.png"
- }
-
- CustomParticle {
- system: sys
- //! [vertex]
- vertexShader:"
- uniform lowp float qt_Opacity;
- varying lowp float fFade;
- varying lowp float fBlur;
-
- void main() {
- defaultMain();
- highp float t = (qt_Timestamp - qt_ParticleData.x) / qt_ParticleData.y;
- highp float fadeIn = min(t * 10., 1.);
- highp float fadeOut = 1. - max(0., min((t - 0.75) * 4., 1.));
-
- fFade = fadeIn * fadeOut * qt_Opacity;
- fBlur = max(0.2 * t, t * qt_ParticleR);
- }
- "
- //! [vertex]
- property variant source: theSource
- property variant blurred: ShaderEffectSource {
- sourceItem: ShaderEffect {
- width: theItem.width
- height: theItem.height
- property variant delta: Qt.size(0.0, 1.0 / height)
- property variant source: ShaderEffectSource {
- sourceItem: ShaderEffect {
- width: theItem.width
- height: theItem.height
- property variant delta: Qt.size(1.0 / width, 0.0)
- property variant source: theSource
- fragmentShader: "
- uniform sampler2D source;
- uniform lowp float qt_Opacity;
- uniform highp vec2 delta;
- varying highp vec2 qt_TexCoord0;
- void main() {
- gl_FragColor =(0.0538 * texture2D(source, qt_TexCoord0 - 3.182 * delta)
- + 0.3229 * texture2D(source, qt_TexCoord0 - 1.364 * delta)
- + 0.2466 * texture2D(source, qt_TexCoord0)
- + 0.3229 * texture2D(source, qt_TexCoord0 + 1.364 * delta)
- + 0.0538 * texture2D(source, qt_TexCoord0 + 3.182 * delta)) * qt_Opacity;
- }"
- }
- }
- fragmentShader: "
- uniform sampler2D source;
- uniform lowp float qt_Opacity;
- uniform highp vec2 delta;
- varying highp vec2 qt_TexCoord0;
- void main() {
- gl_FragColor =(0.0538 * texture2D(source, qt_TexCoord0 - 3.182 * delta)
- + 0.3229 * texture2D(source, qt_TexCoord0 - 1.364 * delta)
- + 0.2466 * texture2D(source, qt_TexCoord0)
- + 0.3229 * texture2D(source, qt_TexCoord0 + 1.364 * delta)
- + 0.0538 * texture2D(source, qt_TexCoord0 + 3.182 * delta)) * qt_Opacity;
- }"
- }
- }
- //! [fragment]
- fragmentShader: "
- uniform sampler2D source;
- uniform sampler2D blurred;
- varying highp vec2 qt_TexCoord0;
- varying highp float fBlur;
- varying highp float fFade;
- void main() {
- gl_FragColor = mix(texture2D(source, qt_TexCoord0), texture2D(blurred, qt_TexCoord0), min(1.0,fBlur*3.0)) * fFade;
- }"
- //! [fragment]
-
- }
-}
-
diff --git a/examples/quick/particles/customparticle/content/fragmentshader.qml b/examples/quick/particles/customparticle/content/fragmentshader.qml
deleted file mode 100644
index 2b28da2ea1..0000000000
--- a/examples/quick/particles/customparticle/content/fragmentshader.qml
+++ /dev/null
@@ -1,126 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-import QtQuick.Particles 2.0
-
-ParticleSystem {
- id: root
- width: 320
- height: 480
- Rectangle {
- z: -1
- anchors.fill: parent
- color: "black"
- Text {
- anchors.bottom: parent.bottom
- anchors.horizontalCenter: parent.horizontalCenter
- font.pixelSize: 14
- color: "white"
- text: "It's all in the fragment shader."
- }
- }
-
- Emitter {
- emitRate: 400
- lifeSpan: 8000
- size: 24
- sizeVariation: 16
- velocity: PointDirection {x: root.width/10; y: root.height/10;}
- acceleration: PointDirection {x: -root.width/40; y: -root.height/40; xVariation: -root.width/20; yVariation: -root.width/20}
- }
-
- CustomParticle {
- vertexShader:"
- uniform lowp float qt_Opacity;
- varying lowp float fFade;
- varying highp vec2 fPos;
-
- void main() {
- qt_TexCoord0 = qt_ParticleTex;
- highp float size = qt_ParticleData.z;
- highp float endSize = qt_ParticleData.w;
-
- highp float t = (qt_Timestamp - qt_ParticleData.x) / qt_ParticleData.y;
-
- highp float currentSize = mix(size, endSize, t * t);
-
- if (t < 0. || t > 1.)
- currentSize = 0.;
-
- highp vec2 pos = qt_ParticlePos
- - currentSize / 2. + currentSize * qt_ParticleTex // adjust size
- + qt_ParticleVec.xy * t * qt_ParticleData.y // apply velocity vector..
- + 0.5 * qt_ParticleVec.zw * pow(t * qt_ParticleData.y, 2.);
-
- gl_Position = qt_Matrix * vec4(pos.x, pos.y, 0, 1);
-
- highp float fadeIn = min(t * 20., 1.);
- highp float fadeOut = 1. - max(0., min((t - 0.75) * 4., 1.));
-
- fFade = fadeIn * fadeOut * qt_Opacity;
- fPos = vec2(pos.x/320., pos.y/480.);
- }
- "
- //! [0]
- fragmentShader: "
- varying highp vec2 fPos;
- varying lowp float fFade;
- varying highp vec2 qt_TexCoord0;
- void main() {//*2 because this generates dark colors mostly
- highp vec2 circlePos = qt_TexCoord0*2.0 - vec2(1.0,1.0);
- highp float dist = length(circlePos);
- highp float circleFactor = max(min(1.0 - dist, 1.0), 0.0);
- gl_FragColor = vec4(fPos.x*2.0 - fPos.y, fPos.y*2.0 - fPos.x, fPos.x*fPos.y*2.0, 0.0) * circleFactor * fFade;
- }"
- //! [0]
-
- }
-}
diff --git a/examples/quick/particles/customparticle/content/imagecolors.qml b/examples/quick/particles/customparticle/content/imagecolors.qml
deleted file mode 100644
index 4ce995b6b4..0000000000
--- a/examples/quick/particles/customparticle/content/imagecolors.qml
+++ /dev/null
@@ -1,136 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-import QtQuick.Particles 2.0
-
-Rectangle {
- width: 400
- height: 400
- Rectangle {
- id: root
- color: "white"
- width: 310
- height: 300
- anchors.centerIn: parent
- ParticleSystem { id: sys }
- CustomParticle {
- system: sys
- property real maxWidth: root.width
- property real maxHeight: root.height
- ShaderEffectSource {
- id: pictureSource
- sourceItem: picture
- hideSource: true
- }
- Image {
- id: picture
- source: "../../images/starfish_3.png"
- }
- ShaderEffectSource {
- id: particleSource
- sourceItem: particle
- hideSource: true
- }
- Image {
- id: particle
- source: "qrc:///particleresources/fuzzydot.png"
- }
- //! [vertex]
- vertexShader:"
- uniform highp float maxWidth;
- uniform highp float maxHeight;
- varying highp vec2 fTex2;
- varying lowp float fFade;
- uniform lowp float qt_Opacity;
-
- void main() {
-
- fTex2 = vec2(qt_ParticlePos.x, qt_ParticlePos.y);
- //Uncomment this next line for each particle to use full texture, instead of the solid color at the center of the particle.
- //fTex2 = fTex2 + ((- qt_ParticleData.z / 2. + qt_ParticleData.z) * qt_ParticleTex); //Adjusts size so it's like a chunk of image.
- fTex2 = fTex2 / vec2(maxWidth, maxHeight);
- highp float t = (qt_Timestamp - qt_ParticleData.x) / qt_ParticleData.y;
- fFade = min(t*4., (1.-t*t)*.75) * qt_Opacity;
- defaultMain();
- }
- "
- //! [vertex]
- property variant particleTexture: particleSource
- property variant pictureTexture: pictureSource
- //! [fragment]
- fragmentShader: "
- uniform sampler2D particleTexture;
- uniform sampler2D pictureTexture;
- varying highp vec2 qt_TexCoord0;
- varying highp vec2 fTex2;
- varying lowp float fFade;
- void main() {
- gl_FragColor = texture2D(pictureTexture, fTex2) * texture2D(particleTexture, qt_TexCoord0).w * fFade;
- }"
- //! [fragment]
- }
-
- Emitter {
- id: emitter
- system: sys
- enabled: false
- lifeSpan: 8000
- maximumEmitted: 4000
- anchors.fill: parent
- size: 16
- acceleration: PointDirection { xVariation: 12; yVariation: 12 }
- }
- MouseArea {
- anchors.fill: parent
- onClicked: emitter.burst(4000);
- }
- }
-}
diff --git a/examples/quick/particles/customparticle/customparticle.pro b/examples/quick/particles/customparticle/customparticle.pro
deleted file mode 100644
index 66a6895d00..0000000000
--- a/examples/quick/particles/customparticle/customparticle.pro
+++ /dev/null
@@ -1,12 +0,0 @@
-TEMPLATE = app
-
-QT += quick qml
-SOURCES += main.cpp
-RESOURCES += \
- customparticle.qrc \
- ../images.qrc \
- ../../shared/shared.qrc
-
-target.path = $$[QT_INSTALL_EXAMPLES]/quick/particles/customparticle
-INSTALLS += target
-
diff --git a/examples/quick/particles/customparticle/customparticle.qml b/examples/quick/particles/customparticle/customparticle.qml
deleted file mode 100644
index bfa6de8b4a..0000000000
--- a/examples/quick/particles/customparticle/customparticle.qml
+++ /dev/null
@@ -1,66 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-import "../../shared" as Examples
-
-Item {
- height: 480
- width: 320
- Examples.LauncherList {
- id: ll
- anchors.fill: parent
- Component.onCompleted: {
- addExample("Blur Particles", "Particles that get blurred over time", Qt.resolvedUrl("content/blurparticles.qml"));
- addExample("Fragment Shader", "Particles drawn with a custom fragment shader", Qt.resolvedUrl("content/fragmentshader.qml"));
- addExample("Image Colors", "An image explodes into colored particles", Qt.resolvedUrl("content/imagecolors.qml"));
- }
- }
-}
diff --git a/examples/quick/particles/customparticle/customparticle.qmlproject b/examples/quick/particles/customparticle/customparticle.qmlproject
deleted file mode 100644
index 6ea1849e31..0000000000
--- a/examples/quick/particles/customparticle/customparticle.qmlproject
+++ /dev/null
@@ -1,16 +0,0 @@
-import QmlProject 1.1
-
-Project {
- mainFile: "customparticle.qml"
-
- /* Include .qml, .js, and image files from current directory and subdirectories */
- QmlFiles {
- directory: "."
- }
- JavaScriptFiles {
- directory: "."
- }
- ImageFiles {
- directory: "."
- }
-}
diff --git a/examples/quick/particles/customparticle/customparticle.qrc b/examples/quick/particles/customparticle/customparticle.qrc
deleted file mode 100644
index 8a4e087a12..0000000000
--- a/examples/quick/particles/customparticle/customparticle.qrc
+++ /dev/null
@@ -1,8 +0,0 @@
-<RCC>
- <qresource prefix="/particles/customparticle">
- <file>customparticle.qml</file>
- <file>content/blurparticles.qml</file>
- <file>content/fragmentshader.qml</file>
- <file>content/imagecolors.qml</file>
- </qresource>
-</RCC>
diff --git a/examples/quick/particles/customparticle/doc/images/qml-customparticle-example.png b/examples/quick/particles/customparticle/doc/images/qml-customparticle-example.png
deleted file mode 100644
index e23c6c8efc..0000000000
--- a/examples/quick/particles/customparticle/doc/images/qml-customparticle-example.png
+++ /dev/null
Binary files differ
diff --git a/examples/quick/particles/customparticle/doc/src/customparticle.qdoc b/examples/quick/particles/customparticle/doc/src/customparticle.qdoc
deleted file mode 100644
index a660d4b5a7..0000000000
--- a/examples/quick/particles/customparticle/doc/src/customparticle.qdoc
+++ /dev/null
@@ -1,54 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-/*!
- \title Qt Quick Particles Examples - CustomParticle
- \example particles/customparticle
- \brief This is a collection of examples using CustomParticle in the QML particle system.
- \image qml-customparticle-example.png
-
- This is a collection of small QML examples relating to using CustomParticle in the particle system.
- Each example is a small QML file emphasizing a different way to use CustomParticle.
-
- Blur Particles adds a blur effect to the particles, which increases over the particle's life time.
- It uses a custom vertex shader:
- \snippet particles/customparticle/content/blurparticles.qml vertex
- to propagate life time simulation to a custom fragment shader:
- \snippet particles/customparticle/content/blurparticles.qml fragment
- which has access to both the normal image sampler and a blurred sampler, the image plus a ShaderEffect.
-
- Fragment Shader just uses the particle system as a vertex delivery system.
- \snippet particles/customparticle/content/fragmentshader.qml 0
-
- Image Colors uses CustomParticle to assign colors to particles based on their location in a picture.
- The vertex shader,
- \snippet particles/customparticle/content/imagecolors.qml vertex
- passes along the starting position for each vertex to the fragment shader,
- \snippet particles/customparticle/content/imagecolors.qml fragment
- which uses it to determine the color for that particle.
-
-*/
diff --git a/examples/quick/particles/customparticle/main.cpp b/examples/quick/particles/customparticle/main.cpp
deleted file mode 100644
index bf7fb4f065..0000000000
--- a/examples/quick/particles/customparticle/main.cpp
+++ /dev/null
@@ -1,51 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-#include "../../shared/shared.h"
-DECLARATIVE_EXAMPLE_MAIN(particles/customparticle/customparticle)
diff --git a/examples/quick/particles/particles.pro b/examples/quick/particles/particles.pro
index db9033a961..5343fa00f1 100644
--- a/examples/quick/particles/particles.pro
+++ b/examples/quick/particles/particles.pro
@@ -1,6 +1,5 @@
TEMPLATE = subdirs
SUBDIRS += affectors \
- customparticle \
emitters \
imageparticle \
itemparticle \
diff --git a/src/particles/CMakeLists.txt b/src/particles/CMakeLists.txt
index 4f3ed5daf4..085b4d27f1 100644
--- a/src/particles/CMakeLists.txt
+++ b/src/particles/CMakeLists.txt
@@ -64,12 +64,6 @@ qt_add_resource(QuickParticles "particles"
${particles_resource_files}
)
set(particles1_resource_files
- "shaders/customparticle.frag"
- "shaders/customparticle.vert"
- "shaders/customparticle_core.frag"
- "shaders/customparticle_core.vert"
- "shaders/customparticletemplate.vert"
- "shaders/customparticletemplate_core.vert"
"shaders/imageparticle.frag"
"shaders/imageparticle.vert"
"shaders/imageparticle_core.frag"
@@ -121,11 +115,6 @@ qt_extend_target(QuickParticles CONDITION EXISTS "qqml_enable_gcov"
-ftest-coverage
)
-qt_extend_target(QuickParticles CONDITION QT_FEATURE_quick_shadereffect
- SOURCES
- qquickcustomparticle.cpp qquickcustomparticle_p.h
-)
-
set_target_properties(QuickParticles PROPERTIES
QT_QML_MODULE_INSTALL_QMLTYPES TRUE
QT_QML_MODULE_VERSION ${CMAKE_PROJECT_VERSION}
diff --git a/src/particles/particles.pri b/src/particles/particles.pri
index adb43b5e45..d2164ec258 100644
--- a/src/particles/particles.pri
+++ b/src/particles/particles.pri
@@ -62,23 +62,9 @@ SOURCES += \
$$PWD/qquickparticlegroup.cpp \
$$PWD/qquickgroupgoal.cpp
-qtConfig(quick-shadereffect) {
-HEADERS += \
- $$PWD/qquickcustomparticle_p.h
-
-SOURCES += \
- $$PWD/qquickcustomparticle.cpp
-}
-
OTHER_FILES += \
- $$PWD/shaders/customparticletemplate.vert \
- $$PWD/shaders/customparticle.vert \
- $$PWD/shaders/customparticle.frag \
$$PWD/shaders/imageparticle.vert \
$$PWD/shaders/imageparticle.frag \
- $$PWD/shaders/customparticletemplate_core.vert \
- $$PWD/shaders/customparticle_core.vert \
- $$PWD/shaders/customparticle_core.frag \
$$PWD/shaders/imageparticle_core.vert \
$$PWD/shaders/imageparticle_core.frag
diff --git a/src/particles/particles.qrc b/src/particles/particles.qrc
index c7102b9aa5..7727691233 100644
--- a/src/particles/particles.qrc
+++ b/src/particles/particles.qrc
@@ -6,14 +6,8 @@
<file>particleresources/star.png</file>
</qresource>
<qresource prefix="/particles">
- <file>shaders/customparticle.frag</file>
- <file>shaders/customparticle.vert</file>
- <file>shaders/customparticletemplate.vert</file>
<file>shaders/imageparticle.frag</file>
<file>shaders/imageparticle.vert</file>
- <file>shaders/customparticle_core.frag</file>
- <file>shaders/customparticle_core.vert</file>
- <file>shaders/customparticletemplate_core.vert</file>
<file>shaders/imageparticle_core.frag</file>
<file>shaders/imageparticle_core.vert</file>
diff --git a/src/particles/qquickcustomparticle.cpp b/src/particles/qquickcustomparticle.cpp
deleted file mode 100644
index ecb71cb913..0000000000
--- a/src/particles/qquickcustomparticle.cpp
+++ /dev/null
@@ -1,465 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the QtQml module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "qquickcustomparticle_p.h"
-#include <QtCore/qrandom.h>
-#include <qopenglcontext.h>
-#include <QtQuick/private/qquickshadereffectmesh_p.h>
-#include <QtQuick/private/qsgshadersourcebuilder_p.h>
-#include <QtQml/qqmlinfo.h>
-
-QT_BEGIN_NAMESPACE
-
-static QSGGeometry::Attribute PlainParticle_Attributes[] = {
- QSGGeometry::Attribute::create(0, 2, GL_FLOAT, true), // Position
- QSGGeometry::Attribute::create(1, 2, GL_FLOAT), // TexCoord
- QSGGeometry::Attribute::create(2, 4, GL_FLOAT), // Data
- QSGGeometry::Attribute::create(3, 4, GL_FLOAT), // Vectors
- QSGGeometry::Attribute::create(4, 1, GL_FLOAT) // r
-};
-
-static QSGGeometry::AttributeSet PlainParticle_AttributeSet =
-{
- 5, // Attribute Count
- (2 + 2 + 4 + 4 + 1) * sizeof(float),
- PlainParticle_Attributes
-};
-
-struct PlainVertex {
- float x;
- float y;
- float tx;
- float ty;
- float t;
- float lifeSpan;
- float size;
- float endSize;
- float vx;
- float vy;
- float ax;
- float ay;
- float r;
-};
-
-struct PlainVertices {
- PlainVertex v1;
- PlainVertex v2;
- PlainVertex v3;
- PlainVertex v4;
-};
-
-/*!
- \qmltype CustomParticle
- \instantiates QQuickCustomParticle
- \inqmlmodule QtQuick.Particles
- \inherits ParticlePainter
- \brief For specifying shaders to paint particles.
- \ingroup qtquick-particles
-
- \note The maximum number of custom particles is limited to 16383.
-*/
-
-QQuickCustomParticle::QQuickCustomParticle(QQuickItem* parent)
- : QQuickParticlePainter(parent)
- , m_common(this, [this](int mappedId){this->propertyChanged(mappedId);})
- , m_myMetaObject(nullptr)
- , m_dirtyUniforms(true)
- , m_dirtyUniformValues(true)
- , m_dirtyTextureProviders(true)
- , m_dirtyProgram(true)
-{
- setFlag(QQuickItem::ItemHasContents);
-}
-
-void QQuickCustomParticle::sceneGraphInvalidated()
-{
- m_nodes.clear();
-}
-
-QQuickCustomParticle::~QQuickCustomParticle()
-{
-}
-
-void QQuickCustomParticle::componentComplete()
-{
- if (!m_myMetaObject)
- m_myMetaObject = metaObject();
-
- m_common.updateShader(this, m_myMetaObject, Key::FragmentShader);
- updateVertexShader();
- reset();
- QQuickParticlePainter::componentComplete();
-}
-
-
-//Trying to keep the shader conventions the same as in qsgshadereffectitem
-/*!
- \qmlproperty string QtQuick.Particles::CustomParticle::fragmentShader
-
- This property holds the fragment shader's GLSL source code.
- The default shader expects the texture coordinate to be passed from the
- vertex shader as "varying highp vec2 qt_TexCoord0", and it samples from a
- sampler2D named "source".
-*/
-
-void QQuickCustomParticle::setFragmentShader(const QByteArray &code)
-{
- if (m_common.source.sourceCode[Key::FragmentShader].constData() == code.constData())
- return;
- m_common.source.sourceCode[Key::FragmentShader] = code;
- m_dirtyProgram = true;
- if (isComponentComplete()) {
- m_common.updateShader(this, m_myMetaObject, Key::FragmentShader);
- reset();
- }
- emit fragmentShaderChanged();
-}
-
-/*!
- \qmlproperty string QtQuick.Particles::CustomParticle::vertexShader
-
- This property holds the vertex shader's GLSL source code.
-
- The default shader passes the texture coordinate along to the fragment
- shader as "varying highp vec2 qt_TexCoord0".
-
- To aid writing a particle vertex shader, the following GLSL code is prepended
- to your vertex shader:
- \code
- attribute highp vec2 qt_ParticlePos;
- attribute highp vec2 qt_ParticleTex;
- attribute highp vec4 qt_ParticleData; // x = time, y = lifeSpan, z = size, w = endSize
- attribute highp vec4 qt_ParticleVec; // x,y = constant velocity, z,w = acceleration
- attribute highp float qt_ParticleR;
- uniform highp mat4 qt_Matrix;
- uniform highp float qt_Timestamp;
- varying highp vec2 qt_TexCoord0;
- void defaultMain() {
- qt_TexCoord0 = qt_ParticleTex;
- highp float size = qt_ParticleData.z;
- highp float endSize = qt_ParticleData.w;
- highp float t = (qt_Timestamp - qt_ParticleData.x) / qt_ParticleData.y;
- highp float currentSize = mix(size, endSize, t * t);
- if (t < 0. || t > 1.)
- currentSize = 0.;
- highp vec2 pos = qt_ParticlePos
- - currentSize / 2. + currentSize * qt_ParticleTex // adjust size
- + qt_ParticleVec.xy * t * qt_ParticleData.y // apply velocity vector..
- + 0.5 * qt_ParticleVec.zw * pow(t * qt_ParticleData.y, 2.);
- gl_Position = qt_Matrix * vec4(pos.x, pos.y, 0, 1);
- }
- \endcode
-
- defaultMain() is the same code as in the default shader, you can call this for basic
- particle functions and then add additional variables for custom effects. Note that
- the vertex shader for particles is responsible for simulating the movement of particles
- over time, the particle data itself only has the starting position and spawn time.
-*/
-
-void QQuickCustomParticle::setVertexShader(const QByteArray &code)
-{
- if (m_common.source.sourceCode[Key::VertexShader].constData() == code.constData())
- return;
- m_common.source.sourceCode[Key::VertexShader] = code;
-
- m_dirtyProgram = true;
- if (isComponentComplete()) {
- updateVertexShader();
- reset();
- }
- emit vertexShaderChanged();
-}
-
-void QQuickCustomParticle::updateVertexShader()
-{
- m_common.disconnectPropertySignals(this, Key::VertexShader);
- m_common.uniformData[Key::VertexShader].clear();
- m_common.clearSignalMappers(Key::VertexShader);
- m_common.attributes.clear();
- m_common.attributes.append("qt_ParticlePos");
- m_common.attributes.append("qt_ParticleTex");
- m_common.attributes.append("qt_ParticleData");
- m_common.attributes.append("qt_ParticleVec");
- m_common.attributes.append("qt_ParticleR");
-
- UniformData d;
- d.name = "qt_Matrix";
- d.specialType = UniformData::Matrix;
- m_common.uniformData[Key::VertexShader].append(d);
- m_common.signalMappers[Key::VertexShader].append(0);
-
- d.name = "qt_Timestamp";
- d.specialType = UniformData::None;
- m_common.uniformData[Key::VertexShader].append(d);
- m_common.signalMappers[Key::VertexShader].append(0);
-
- const QByteArray &code = m_common.source.sourceCode[Key::VertexShader];
- if (!code.isEmpty())
- m_common.lookThroughShaderCode(this, m_myMetaObject, Key::VertexShader, code);
-
- m_common.connectPropertySignals(this, m_myMetaObject, Key::VertexShader);
-}
-
-void QQuickCustomParticle::reset()
-{
- QQuickParticlePainter::reset();
- update();
-}
-
-QSGNode *QQuickCustomParticle::updatePaintNode(QSGNode *oldNode, UpdatePaintNodeData *)
-{
- QQuickOpenGLShaderEffectNode *rootNode = static_cast<QQuickOpenGLShaderEffectNode *>(oldNode);
- if (m_pleaseReset){
- delete rootNode;//Automatically deletes children
- rootNode = nullptr;
- m_nodes.clear();
- m_pleaseReset = false;
- m_dirtyProgram = true;
- }
-
- if (m_system && m_system->isRunning() && !m_system->isPaused()){
- rootNode = prepareNextFrame(rootNode);
- if (rootNode) {
- foreach (QSGGeometryNode* node, m_nodes)
- node->markDirty(QSGNode::DirtyGeometry);
- update();
- }
- }
-
- return rootNode;
-}
-
-QQuickOpenGLShaderEffectNode *QQuickCustomParticle::prepareNextFrame(QQuickOpenGLShaderEffectNode *rootNode)
-{
- if (!rootNode)
- rootNode = buildCustomNodes();
-
- if (!rootNode)
- return nullptr;
-
- if (m_dirtyProgram) {
- const bool isES = QOpenGLContext::currentContext()->isOpenGLES();
-
- QQuickOpenGLShaderEffectMaterial *material = static_cast<QQuickOpenGLShaderEffectMaterial *>(rootNode->material());
- Q_ASSERT(material);
-
- Key s = m_common.source;
- QSGShaderSourceBuilder builder;
- if (s.sourceCode[Key::FragmentShader].isEmpty()) {
- builder.appendSourceFile(QStringLiteral(":/particles/shaders/customparticle.frag"));
- if (isES)
- builder.removeVersion();
- s.sourceCode[Key::FragmentShader] = builder.source();
- builder.clear();
- }
-
- builder.appendSourceFile(QStringLiteral(":/particles/shaders/customparticletemplate.vert"));
- if (isES)
- builder.removeVersion();
-
- if (s.sourceCode[Key::VertexShader].isEmpty())
- builder.appendSourceFile(QStringLiteral(":/particles/shaders/customparticle.vert"));
- s.sourceCode[Key::VertexShader] = builder.source() + s.sourceCode[Key::VertexShader];
-
- material->setProgramSource(s);
- material->attributes = m_common.attributes;
- foreach (QQuickOpenGLShaderEffectNode* node, m_nodes)
- node->markDirty(QSGNode::DirtyMaterial);
-
- m_dirtyProgram = false;
- m_dirtyUniforms = true;
- }
-
- m_lastTime = m_system->systemSync(this) / 1000.;
- if (true) //Currently this is how we update timestamp... potentially over expensive.
- buildData(rootNode);
- return rootNode;
-}
-
-QQuickOpenGLShaderEffectNode* QQuickCustomParticle::buildCustomNodes()
-{
- typedef QHash<int, QQuickOpenGLShaderEffectNode*>::const_iterator NodeHashConstIt;
-
- if (!QOpenGLContext::currentContext())
- return nullptr;
-
- if (m_count * 4 > 0xffff) {
- // Index data is ushort.
- qmlInfo(this) << "CustomParticle: Too many particles - maximum 16383 per CustomParticle";
- return nullptr;
- }
-
- if (m_count <= 0) {
- qmlInfo(this) << "CustomParticle: Too few particles";
- return nullptr;
- }
-
- if (groups().isEmpty())
- return nullptr;
-
- QQuickOpenGLShaderEffectNode *rootNode = nullptr;
- QQuickOpenGLShaderEffectMaterial *material = new QQuickOpenGLShaderEffectMaterial;
- m_dirtyProgram = true;
-
- for (auto groupId : groupIds()) {
- int count = m_system->groupData[groupId]->size();
-
- QQuickOpenGLShaderEffectNode* node = new QQuickOpenGLShaderEffectNode();
- m_nodes.insert(groupId, node);
-
- node->setMaterial(material);
-
- //Create Particle Geometry
- int vCount = count * 4;
- int iCount = count * 6;
- QSGGeometry *g = new QSGGeometry(PlainParticle_AttributeSet, vCount, iCount);
- g->setDrawingMode(GL_TRIANGLES);
- node->setGeometry(g);
- node->setFlag(QSGNode::OwnsGeometry, true);
- PlainVertex *vertices = (PlainVertex *) g->vertexData();
- for (int p=0; p < count; ++p) {
- commit(groupId, p);
- vertices[0].tx = 0;
- vertices[0].ty = 0;
-
- vertices[1].tx = 1;
- vertices[1].ty = 0;
-
- vertices[2].tx = 0;
- vertices[2].ty = 1;
-
- vertices[3].tx = 1;
- vertices[3].ty = 1;
- vertices += 4;
- }
- quint16 *indices = g->indexDataAsUShort();
- for (int i=0; i < count; ++i) {
- int o = i * 4;
- indices[0] = o;
- indices[1] = o + 1;
- indices[2] = o + 2;
- indices[3] = o + 1;
- indices[4] = o + 3;
- indices[5] = o + 2;
- indices += 6;
- }
- }
-
- NodeHashConstIt it = m_nodes.cbegin();
- rootNode = it.value();
- rootNode->setFlag(QSGNode::OwnsMaterial, true);
- NodeHashConstIt cend = m_nodes.cend();
- for (++it; it != cend; ++it)
- rootNode->appendChildNode(it.value());
-
- return rootNode;
-}
-
-void QQuickCustomParticle::sourceDestroyed(QObject *object)
-{
- m_common.sourceDestroyed(object);
-}
-
-void QQuickCustomParticle::propertyChanged(int mappedId)
-{
- bool textureProviderChanged;
- m_common.propertyChanged(this, m_myMetaObject, mappedId, &textureProviderChanged);
- m_dirtyTextureProviders |= textureProviderChanged;
- m_dirtyUniformValues = true;
- update();
-}
-
-
-void QQuickCustomParticle::buildData(QQuickOpenGLShaderEffectNode *rootNode)
-{
- if (!rootNode)
- return;
- for (int shaderType = 0; shaderType < Key::ShaderTypeCount; ++shaderType) {
- for (int i = 0; i < m_common.uniformData[shaderType].size(); ++i) {
- if (m_common.uniformData[shaderType].at(i).name == "qt_Timestamp")
- m_common.uniformData[shaderType][i].value = QVariant::fromValue(m_lastTime);
- }
- }
- m_common.updateMaterial(rootNode, static_cast<QQuickOpenGLShaderEffectMaterial *>(rootNode->material()),
- m_dirtyUniforms, true, m_dirtyTextureProviders);
- foreach (QQuickOpenGLShaderEffectNode* node, m_nodes)
- node->markDirty(QSGNode::DirtyMaterial);
- m_dirtyUniforms = m_dirtyUniformValues = m_dirtyTextureProviders = false;
-}
-
-void QQuickCustomParticle::initialize(int gIdx, int pIdx)
-{
- QQuickParticleData* datum = m_system->groupData[gIdx]->data[pIdx];
- datum->r = QRandomGenerator::global()->generateDouble();
-}
-
-void QQuickCustomParticle::commit(int gIdx, int pIdx)
-{
- if (m_nodes[gIdx] == 0)
- return;
-
- QQuickParticleData* datum = m_system->groupData[gIdx]->data[pIdx];
- PlainVertices *particles = (PlainVertices *) m_nodes[gIdx]->geometry()->vertexData();
- PlainVertex *vertices = (PlainVertex *)&particles[pIdx];
- for (int i=0; i<4; ++i) {
- vertices[i].x = datum->x - m_systemOffset.x();
- vertices[i].y = datum->y - m_systemOffset.y();
- vertices[i].t = datum->t;
- vertices[i].lifeSpan = datum->lifeSpan;
- vertices[i].size = datum->size;
- vertices[i].endSize = datum->endSize;
- vertices[i].vx = datum->vx;
- vertices[i].vy = datum->vy;
- vertices[i].ax = datum->ax;
- vertices[i].ay = datum->ay;
- vertices[i].r = datum->r;
- }
-}
-
-void QQuickCustomParticle::itemChange(ItemChange change, const ItemChangeData &value)
-{
- if (change == QQuickItem::ItemSceneChange)
- m_common.updateWindow(value.window);
- QQuickParticlePainter::itemChange(change, value);
-}
-
-
-QT_END_NAMESPACE
-
-#include "moc_qquickcustomparticle_p.cpp"
diff --git a/src/particles/qquickcustomparticle_p.h b/src/particles/qquickcustomparticle_p.h
deleted file mode 100644
index 90643fe3e4..0000000000
--- a/src/particles/qquickcustomparticle_p.h
+++ /dev/null
@@ -1,127 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the QtQml module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef CUSTOM_PARTICLE_H
-#define CUSTOM_PARTICLE_H
-
-//
-// W A R N I N G
-// -------------
-//
-// This file is not part of the Qt API. It exists purely as an
-// implementation detail. This header file may change from version to
-// version without notice, or even be removed.
-//
-// We mean it.
-//
-#include "qquickparticlepainter_p.h"
-#include <private/qquickopenglshadereffectnode_p.h>
-#include <private/qquickopenglshadereffect_p.h>
-
-QT_BEGIN_NAMESPACE
-
-class QSGNode;
-struct PlainVertices;
-
-class QQuickShaderEffectMaterialObject;
-
-//Genealogy: Hybrid of UltraParticle and ShaderEffect
-class QQuickCustomParticle : public QQuickParticlePainter
-{
- Q_OBJECT
- Q_PROPERTY(QByteArray fragmentShader READ fragmentShader WRITE setFragmentShader NOTIFY fragmentShaderChanged)
- Q_PROPERTY(QByteArray vertexShader READ vertexShader WRITE setVertexShader NOTIFY vertexShaderChanged)
- QML_NAMED_ELEMENT(CustomParticle)
- QML_ADDED_IN_VERSION(2, 0)
-
-public:
- explicit QQuickCustomParticle(QQuickItem* parent=0);
- ~QQuickCustomParticle();
-
- QByteArray fragmentShader() const { return m_common.source.sourceCode[Key::FragmentShader]; }
- void setFragmentShader(const QByteArray &code);
-
- QByteArray vertexShader() const { return m_common.source.sourceCode[Key::VertexShader]; }
- void setVertexShader(const QByteArray &code);
-
-Q_SIGNALS:
- void fragmentShaderChanged();
- void vertexShaderChanged();
-
-protected:
- void initialize(int gIdx, int pIdx) override;
- void commit(int gIdx, int pIdx) override;
-
- QSGNode *updatePaintNode(QSGNode *, UpdatePaintNodeData *) override;
- QQuickOpenGLShaderEffectNode *prepareNextFrame(QQuickOpenGLShaderEffectNode *rootNode);
- void reset() override;
- void resize(int oldCount, int newCount);
- void componentComplete() override;
- QQuickOpenGLShaderEffectNode *buildCustomNodes();
-
- void sceneGraphInvalidated() override;
- void itemChange(ItemChange change, const ItemChangeData &value) override;
-
-private Q_SLOTS:
- void sourceDestroyed(QObject *object);
-
-private:
- void propertyChanged(int mappedId);
-
- typedef QQuickOpenGLShaderEffectMaterialKey Key;
- typedef QQuickOpenGLShaderEffectMaterial::UniformData UniformData;
-
- void buildData(QQuickOpenGLShaderEffectNode *rootNode);
- void updateVertexShader();
-
- QQuickOpenGLShaderEffectCommon m_common;
- const QMetaObject *m_myMetaObject;
-
- QHash<int, QQuickOpenGLShaderEffectNode*> m_nodes;
- qreal m_lastTime;
-
- uint m_dirtyUniforms : 1;
- uint m_dirtyUniformValues : 1;
- uint m_dirtyTextureProviders : 1;
- uint m_dirtyProgram : 1;
-};
-
-QT_END_NAMESPACE
-
-#endif //HEADER_GUARD
diff --git a/src/particles/qquickparticlesmodule.cpp b/src/particles/qquickparticlesmodule.cpp
index 801af079e6..8b535d85c7 100644
--- a/src/particles/qquickparticlesmodule.cpp
+++ b/src/particles/qquickparticlesmodule.cpp
@@ -40,9 +40,6 @@
#include <private/qtquickglobal_p.h>
#include "qquickangledirection_p.h"
-#if QT_CONFIG(quick_shadereffect)
-#include "qquickcustomparticle_p.h"
-#endif
#include "qquickellipseextruder_p.h"
#include "qquicktrailemitter_p.h"
#include "qquickfriction_p.h"
diff --git a/src/particles/qquickparticlesystem.cpp b/src/particles/qquickparticlesystem.cpp
index 57812ba797..396d6f0a17 100644
--- a/src/particles/qquickparticlesystem.cpp
+++ b/src/particles/qquickparticlesystem.cpp
@@ -459,7 +459,6 @@ QQuickParticleData::QQuickParticleData()
color.g = 255;
color.b = 255;
color.a = 255;
- r = 0;
delegate = nullptr;
modelIndex = -1;
}
@@ -518,7 +517,6 @@ void QQuickParticleData::clone(const QQuickParticleData& other)
color.g = other.color.g;
color.b = other.color.b;
color.a = other.color.a;
- r = other.r;
delegate = other.delegate;
modelIndex = other.modelIndex;
diff --git a/src/particles/qquickparticlesystem_p.h b/src/particles/qquickparticlesystem_p.h
index b1053d8ff8..d38cd9007a 100644
--- a/src/particles/qquickparticlesystem_p.h
+++ b/src/particles/qquickparticlesystem_p.h
@@ -324,11 +324,6 @@ public:
int modelIndex;
//Used by custom affectors
float update;
- //Used by CustomParticle
- float r;
-
- // 4 bytes wasted
-
void debugDump(QQuickParticleSystem *particleSystem) const;
bool stillAlive(QQuickParticleSystem *particleSystem) const; //Only checks end, because usually that's all you need and it's a little faster.
diff --git a/src/particles/qquickv4particledata.cpp b/src/particles/qquickv4particledata.cpp
index 459797f977..d1f47da1c0 100644
--- a/src/particles/qquickv4particledata.cpp
+++ b/src/particles/qquickv4particledata.cpp
@@ -448,7 +448,6 @@ FLOAT_GETTER_AND_SETTER(frameDuration)
FLOAT_GETTER_AND_SETTER(frameAt)
FLOAT_GETTER_AND_SETTER(frameCount)
FLOAT_GETTER_AND_SETTER(animT)
-FLOAT_GETTER_AND_SETTER(r)
FAKE_FLOAT_GETTER_AND_SETTER(curX, curX, setInstantaneousX)
FAKE_FLOAT_GETTER_AND_SETTER(curVX, curVX, setInstantaneousVX)
FAKE_FLOAT_GETTER_AND_SETTER(curAX, curAX, setInstantaneousAX)
@@ -487,7 +486,6 @@ QV4ParticleDataDeletable::QV4ParticleDataDeletable(QV4::ExecutionEngine *v4)
REGISTER_ACCESSOR(p, v4, frameAt, frameAt);
REGISTER_ACCESSOR(p, v4, frameCount, frameCount);
REGISTER_ACCESSOR(p, v4, animT, animationT);
- REGISTER_ACCESSOR(p, v4, r, r);
REGISTER_ACCESSOR(p, v4, update, update);
REGISTER_ACCESSOR(p, v4, curX, x);
REGISTER_ACCESSOR(p, v4, curVX, vx);
diff --git a/src/particles/shaders/customparticle.frag b/src/particles/shaders/customparticle.frag
deleted file mode 100644
index 64007029f7..0000000000
--- a/src/particles/shaders/customparticle.frag
+++ /dev/null
@@ -1,11 +0,0 @@
-#version 120
-
-varying highp vec2 qt_TexCoord0;
-
-uniform sampler2D source;
-uniform lowp float qt_Opacity;
-
-void main()
-{
- gl_FragColor = texture2D(source, qt_TexCoord0) * qt_Opacity;
-} \ No newline at end of file
diff --git a/src/particles/shaders/customparticle.vert b/src/particles/shaders/customparticle.vert
deleted file mode 100644
index b99f73ea53..0000000000
--- a/src/particles/shaders/customparticle.vert
+++ /dev/null
@@ -1,4 +0,0 @@
-void main()
-{
- defaultMain();
-} \ No newline at end of file
diff --git a/src/particles/shaders/customparticle_core.frag b/src/particles/shaders/customparticle_core.frag
deleted file mode 100644
index 699c834605..0000000000
--- a/src/particles/shaders/customparticle_core.frag
+++ /dev/null
@@ -1,13 +0,0 @@
-#version 150
-
-in vec2 qt_TexCoord0;
-
-out vec4 fragColor;
-
-uniform sampler2D source;
-uniform float qt_Opacity;
-
-void main()
-{
- fragColor = texture(source, qt_TexCoord0) * qt_Opacity;
-} \ No newline at end of file
diff --git a/src/particles/shaders/customparticle_core.vert b/src/particles/shaders/customparticle_core.vert
deleted file mode 100644
index b99f73ea53..0000000000
--- a/src/particles/shaders/customparticle_core.vert
+++ /dev/null
@@ -1,4 +0,0 @@
-void main()
-{
- defaultMain();
-} \ No newline at end of file
diff --git a/src/particles/shaders/customparticletemplate.vert b/src/particles/shaders/customparticletemplate.vert
deleted file mode 100644
index eef8458a85..0000000000
--- a/src/particles/shaders/customparticletemplate.vert
+++ /dev/null
@@ -1,28 +0,0 @@
-#version 120
-
-attribute highp vec2 qt_ParticlePos;
-attribute highp vec2 qt_ParticleTex;
-attribute highp vec4 qt_ParticleData; // x = time, y = lifeSpan, z = size, w = endSize
-attribute highp vec4 qt_ParticleVec; // x,y = constant velocity, z,w = acceleration
-attribute highp float qt_ParticleR;
-
-uniform highp mat4 qt_Matrix;
-uniform highp float qt_Timestamp;
-
-varying highp vec2 qt_TexCoord0;
-
-void defaultMain()
-{
- qt_TexCoord0 = qt_ParticleTex;
- highp float size = qt_ParticleData.z;
- highp float endSize = qt_ParticleData.w;
- highp float t = (qt_Timestamp - qt_ParticleData.x) / qt_ParticleData.y;
- highp float currentSize = mix(size, endSize, t * t);
- if (t < 0. || t > 1.)
- currentSize = 0.;
- highp vec2 pos = qt_ParticlePos
- - currentSize / 2. + currentSize * qt_ParticleTex // adjust size
- + qt_ParticleVec.xy * t * qt_ParticleData.y // apply velocity vector..
- + 0.5 * qt_ParticleVec.zw * pow(t * qt_ParticleData.y, 2.);
- gl_Position = qt_Matrix * vec4(pos.x, pos.y, 0, 1);
-}
diff --git a/src/particles/shaders/customparticletemplate_core.vert b/src/particles/shaders/customparticletemplate_core.vert
deleted file mode 100644
index 15d38e797c..0000000000
--- a/src/particles/shaders/customparticletemplate_core.vert
+++ /dev/null
@@ -1,28 +0,0 @@
-#version 150 core
-
-in vec2 qt_ParticlePos;
-in vec2 qt_ParticleTex;
-in vec4 qt_ParticleData; // x = time, y = lifeSpan, z = size, w = endSize
-in vec4 qt_ParticleVec; // x,y = constant velocity, z,w = acceleration
-in float qt_ParticleR;
-
-out vec2 qt_TexCoord0;
-
-uniform mat4 qt_Matrix;
-uniform float qt_Timestamp;
-
-void defaultMain()
-{
- qt_TexCoord0 = qt_ParticleTex;
- float size = qt_ParticleData.z;
- float endSize = qt_ParticleData.w;
- float t = (qt_Timestamp - qt_ParticleData.x) / qt_ParticleData.y;
- float currentSize = mix(size, endSize, t * t);
- if (t < 0. || t > 1.)
- currentSize = 0.;
- vec2 pos = qt_ParticlePos
- - currentSize / 2. + currentSize * qt_ParticleTex // adjust size
- + qt_ParticleVec.xy * t * qt_ParticleData.y // apply velocity vector..
- + 0.5 * qt_ParticleVec.zw * pow(t * qt_ParticleData.y, 2.);
- gl_Position = qt_Matrix * vec4(pos.x, pos.y, 0, 1);
-}
diff --git a/src/quick/doc/src/concepts/effects/particles.qdoc b/src/quick/doc/src/concepts/effects/particles.qdoc
index 0b87eb4529..1cee633b75 100644
--- a/src/quick/doc/src/concepts/effects/particles.qdoc
+++ b/src/quick/doc/src/concepts/effects/particles.qdoc
@@ -100,10 +100,9 @@
Painters are the types that visualize logical particles. For each logical particle in the groups assigned to it,
which are within its bounds (or outside, if you do not set the clip property on the type) it will be visualized
in a manner dependent on the type of ParticlePainter. The base type of ParticlePainter does not draw anything.
- ImageParticle renders an image at the particle location. CustomParticle allows you to write your own shaders to render
- the particles, passing in the logical particle state as vertex data. ItemParticle allows you to visualize logical
- particles using arbitrary QML delegates. ModelParticle is similar, but coordinates model data amongst the delegates
- in a similar manner to the view classes.
+ ImageParticle renders an image at the particle location. ItemParticle allows you to visualize logical particles
+ using arbitrary QML delegates. ModelParticle is similar, but coordinates model data amongst the delegates in a
+ similar manner to the view classes.
As the ParticlePainter is the QML type visualizing the particles in the scene, it is its Z value which is important
when trying to place particles above or below other types visually.
diff --git a/src/quick/items/qquickopenglshadereffect_p.h b/src/quick/items/qquickopenglshadereffect_p.h
index 0c2adadc62..0a2ee00115 100644
--- a/src/quick/items/qquickopenglshadereffect_p.h
+++ b/src/quick/items/qquickopenglshadereffect_p.h
@@ -77,7 +77,7 @@ namespace QtPrivate {
class MappedSlotObject;
}
-// Common class for QQuickOpenGLShaderEffect and QQuickCustomParticle.
+// Used by QQuickOpenGLShaderEffect.
struct Q_QUICK_PRIVATE_EXPORT QQuickOpenGLShaderEffectCommon
{
typedef QQuickOpenGLShaderEffectMaterialKey Key;
diff --git a/tests/auto/guiapplauncher/examples.txt b/tests/auto/guiapplauncher/examples.txt
index 396e93dc1b..40c41e59fb 100644
--- a/tests/auto/guiapplauncher/examples.txt
+++ b/tests/auto/guiapplauncher/examples.txt
@@ -23,7 +23,6 @@
"quick/window Example", "examples/quick/window", "window", 10, -1
"quick/particles/system Example", "examples/quick/particles/system", "system", 0, -1
"quick/particles/emitters Example", "examples/quick/particles/emitters", "emitters", 0, -1
-"quick/particles/customparticle Example", "examples/quick/particles/customparticle", "customparticle", 0, -1
"quick/particles/imageparticle Example", "examples/quick/particles/imageparticle", "imageparticle", 0, -1
"quick/particles/affectors Example", "examples/quick/particles/affectors", "affectors", 0, -1
"quick/localstorage/localstorage Example", "examples/quick/localstorage/localstorage", "localstorage", 0, -1
diff --git a/tests/auto/particles/CMakeLists.txt b/tests/auto/particles/CMakeLists.txt
index b712210c0a..a8bbefc836 100644
--- a/tests/auto/particles/CMakeLists.txt
+++ b/tests/auto/particles/CMakeLists.txt
@@ -5,7 +5,6 @@ if(QT_FEATURE_private_tests)
add_subdirectory(qquickangleddirection)
add_subdirectory(qquickcumulativedirection)
add_subdirectory(qquickcustomaffector)
- add_subdirectory(qquickcustomparticle)
add_subdirectory(qquickellipseextruder)
add_subdirectory(qquickgroupgoal)
add_subdirectory(qquickfriction)
diff --git a/tests/auto/particles/particles.pro b/tests/auto/particles/particles.pro
index 6ee1290dbb..0285023c94 100644
--- a/tests/auto/particles/particles.pro
+++ b/tests/auto/particles/particles.pro
@@ -5,7 +5,6 @@ PRIVATETESTS += \
qquickangleddirection \
qquickcumulativedirection \
qquickcustomaffector \
- qquickcustomparticle \
qquickellipseextruder \
qquickgroupgoal \
qquickfriction \
diff --git a/tests/auto/particles/qquickcustomparticle/CMakeLists.txt b/tests/auto/particles/qquickcustomparticle/CMakeLists.txt
deleted file mode 100644
index c4760a9475..0000000000
--- a/tests/auto/particles/qquickcustomparticle/CMakeLists.txt
+++ /dev/null
@@ -1,40 +0,0 @@
-# Generated from qquickcustomparticle.pro.
-
-#####################################################################
-## tst_qquickcustomparticle Test:
-#####################################################################
-
-# Collect test data
-file(GLOB_RECURSE test_data_glob
- RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
- data/*)
-list(APPEND test_data ${test_data_glob})
-
-qt_add_test(tst_qquickcustomparticle
- SOURCES
- ../../shared/util.cpp ../../shared/util.h
- tst_qquickcustomparticle.cpp
- INCLUDE_DIRECTORIES
- ../../shared
- PUBLIC_LIBRARIES
- Qt::CorePrivate
- Qt::Gui
- Qt::GuiPrivate
- Qt::QmlPrivate
- Qt::QuickParticlesPrivate
- Qt::QuickPrivate
- TESTDATA ${test_data}
-)
-
-## Scopes:
-#####################################################################
-
-qt_extend_target(tst_qquickcustomparticle CONDITION ANDROID OR IOS
- DEFINES
- QT_QMLTEST_DATADIR=\\\":/data\\\"
-)
-
-qt_extend_target(tst_qquickcustomparticle CONDITION NOT ANDROID AND NOT IOS
- DEFINES
- QT_QMLTEST_DATADIR=\\\"${CMAKE_CURRENT_SOURCE_DIR}/data\\\"
-)
diff --git a/tests/auto/particles/qquickcustomparticle/data/basic.qml b/tests/auto/particles/qquickcustomparticle/data/basic.qml
deleted file mode 100644
index 101b1dda7b..0000000000
--- a/tests/auto/particles/qquickcustomparticle/data/basic.qml
+++ /dev/null
@@ -1,58 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the test suite of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-import QtQuick.Particles 2.0
-
-Rectangle {
- color: "black"
- width: 320
- height: 320
-
- ParticleSystem {
- id: sys
- objectName: "system"
- anchors.fill: parent
-
- CustomParticle {
- property variant source: ShaderEffectSource {
- hideSource: true
- sourceItem: Image {
- source: "../../shared/star.png"
- }
- }
- }
-
- Emitter{
- //0,0 position
- size: 32
- emitRate: 1000
- lifeSpan: 500
- }
- }
-}
diff --git a/tests/auto/particles/qquickcustomparticle/data/deleteSourceItem.qml b/tests/auto/particles/qquickcustomparticle/data/deleteSourceItem.qml
deleted file mode 100644
index 03ff8844f6..0000000000
--- a/tests/auto/particles/qquickcustomparticle/data/deleteSourceItem.qml
+++ /dev/null
@@ -1,68 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the test suite of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-import QtQuick.Particles 2.0
-
-Rectangle {
- color: "black"
- width: 320
- height: 320
-
- ParticleSystem {
- id: sys
- objectName: "system"
- anchors.fill: parent
-
- CustomParticle {
- id: cp
- property variant source
- }
-
- Emitter{
- //0,0 position
- size: 32
- emitRate: 1000
- lifeSpan: 500
- }
- }
-
- ShaderEffectSource {
- id: doomedses
- hideSource: true
- sourceItem: Image {
- id: doomed
- source: "../../shared/star.png"
- }
- }
-
- function setDeletedSourceItem() {
- doomed.destroy();
- cp.source = doomedses;
- }
-}
diff --git a/tests/auto/particles/qquickcustomparticle/qquickcustomparticle.pro b/tests/auto/particles/qquickcustomparticle/qquickcustomparticle.pro
deleted file mode 100644
index d02b45457a..0000000000
--- a/tests/auto/particles/qquickcustomparticle/qquickcustomparticle.pro
+++ /dev/null
@@ -1,10 +0,0 @@
-CONFIG += testcase
-TARGET = tst_qquickcustomparticle
-SOURCES += tst_qquickcustomparticle.cpp
-macx:CONFIG -= app_bundle
-
-include (../../shared/util.pri)
-TESTDATA = data/*
-
-QT += core-private gui-private qml-private quick-private quickparticles-private testlib
-
diff --git a/tests/auto/particles/qquickcustomparticle/tst_qquickcustomparticle.cpp b/tests/auto/particles/qquickcustomparticle/tst_qquickcustomparticle.cpp
deleted file mode 100644
index 60c6a37899..0000000000
--- a/tests/auto/particles/qquickcustomparticle/tst_qquickcustomparticle.cpp
+++ /dev/null
@@ -1,101 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the test suite of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include <QtTest/QtTest>
-#include "../shared/particlestestsshared.h"
-#include <private/qquickparticlesystem_p.h>
-#include <private/qabstractanimation_p.h>
-
-#include "../../shared/util.h"
-
-class tst_qquickcustomparticle : public QQmlDataTest
-{
- Q_OBJECT
-public:
- tst_qquickcustomparticle() {}
-
-private slots:
- void initTestCase();
- void test_basic();
- void test_deleteSourceItem();
-};
-
-void tst_qquickcustomparticle::initTestCase()
-{
- QQmlDataTest::initTestCase();
- QUnifiedTimer::instance()->setConsistentTiming(true);
-}
-
-void tst_qquickcustomparticle::test_basic()
-{
- QQuickView* view = createView(testFileUrl("basic.qml"), 600);
- QVERIFY(view);
- QQuickParticleSystem* system = view->rootObject()->findChild<QQuickParticleSystem*>("system");
- ensureAnimTime(600, system->m_animation);
-
- bool oneNonZero = false;
- QVERIFY(extremelyFuzzyCompare(system->groupData[0]->size(), 500, 10));
- for (QQuickParticleData *d : qAsConst(system->groupData[0]->data)) {
- if (d->t == -1)
- continue; //Particle data unused
-
- QCOMPARE(d->x, 0.f);
- QCOMPARE(d->y, 0.f);
- QCOMPARE(d->vx, 0.f);
- QCOMPARE(d->vy, 0.f);
- QCOMPARE(d->ax, 0.f);
- QCOMPARE(d->ay, 0.f);
- QCOMPARE(d->lifeSpan, 0.5f);
- QCOMPARE(d->size, 32.f);
- QCOMPARE(d->endSize, 32.f);
- QVERIFY(myFuzzyLEQ(d->t, ((qreal)system->timeInt/1000.0)));
- QVERIFY(d->r >= 0.0 && d->r <= 1.0);
- if (d->r != 0.0 )
- oneNonZero = true;
- }
- delete view;
- QVERIFY(oneNonZero);//Zero is a valid value, but it also needs to be set to a random number
-}
-
-void tst_qquickcustomparticle::test_deleteSourceItem()
-{
- // purely to ensure that deleting the sourceItem of a shader doesn't cause a crash
- QQuickView* view = createView(testFileUrl("deleteSourceItem.qml"), 600);
- QVERIFY(view);
- QObject *obj = view->rootObject();
- QVERIFY(obj);
- QQuickParticleSystem* system = view->rootObject()->findChild<QQuickParticleSystem*>("system");
- ensureAnimTime(200, system->m_animation);
- QMetaObject::invokeMethod(obj, "setDeletedSourceItem");
- ensureAnimTime(200, system->m_animation);
- delete view;
-}
-
-QTEST_MAIN(tst_qquickcustomparticle);
-
-#include "tst_qquickcustomparticle.moc"