aboutsummaryrefslogtreecommitdiffstats
path: root/examples/declarative/particles/allsmiles/smile.qml
diff options
context:
space:
mode:
Diffstat (limited to 'examples/declarative/particles/allsmiles/smile.qml')
-rw-r--r--examples/declarative/particles/allsmiles/smile.qml100
1 files changed, 83 insertions, 17 deletions
diff --git a/examples/declarative/particles/allsmiles/smile.qml b/examples/declarative/particles/allsmiles/smile.qml
index e37e8fa98e..6b122e7be5 100644
--- a/examples/declarative/particles/allsmiles/smile.qml
+++ b/examples/declarative/particles/allsmiles/smile.qml
@@ -39,35 +39,101 @@
****************************************************************************/
import QtQuick 2.0
-import Qt.labs.particles 2.0
+import QtQuick.Particles 2.0
Rectangle{
+ id: root
color: "white"
width: 310
height: 300
ParticleSystem{ id: sys }
- Picture{
+ CustomParticle{
system: sys
- anchors.fill: parent
- image: "content/singlesmile.png"
- onceOff: true
- }
- ColoredParticle{
- system: sys
- image: "content/particle.png"
- color: "black"
- alpha: 0.4
- sizeTable: "content/sizeInOut.png"
+ property real maxWidth: root.width
+ property real maxHeight: root.height
+ ShaderEffectSource{
+ id: pictureSource
+ sourceItem: picture
+ hideSource: true
+ }
+ Image{
+ id: picture
+ source: "content/singlesmile.png"
+ }
+ ShaderEffectSource{
+ id: particleSource
+ sourceItem: particle
+ hideSource: true
+ }
+ Image{
+ id: particle
+ source: "content/particle.png"
+ }
+ vertexShader:"
+ attribute highp vec2 vPos;
+ attribute highp vec2 vTex;
+ attribute highp vec4 vData; // x = time, y = lifeSpan, z = size, w = endSize
+ attribute highp vec4 vVec; // x,y = constant speed, z,w = acceleration
+ attribute highp float r;
+
+ uniform highp float maxWidth;
+ uniform highp float maxHeight;
+
+ uniform highp mat4 qt_ModelViewProjectionMatrix;
+ uniform highp float timestamp;
+ uniform lowp float qt_Opacity;
+
+ varying highp vec2 fTex;
+ varying highp vec2 fTex2;
+ varying lowp float fFade;
+
+ void main() {
+ fTex = vTex;
+ fTex2 = vec2(vPos.x / maxWidth, vPos.y / maxHeight);
+ highp float size = vData.z;
+ highp float endSize = vData.w;
+
+ highp float t = (timestamp - vData.x) / vData.y;
+
+ highp float currentSize = mix(size, endSize, t * t);
+
+ if (t < 0. || t > 1.)
+ currentSize = 0.;
+
+ highp vec2 pos = vPos
+ - currentSize / 2. + currentSize * vTex // adjust size
+ + vVec.xy * t * vData.y // apply speed vector..
+ + 0.5 * vVec.zw * pow(t * vData.y, 2.);
+
+ gl_Position = qt_ModelViewProjectionMatrix * vec4(pos.x, pos.y, 0, 1);
+
+ highp float fadeIn = min(t * 10., 1.);
+ highp float fadeOut = 1. - max(0., min((t - 0.75) * 4., 1.));
+
+ fFade = fadeIn * fadeOut * qt_Opacity;
+ }
+ "
+ property variant particleTexture: particleSource
+ property variant pictureTexture: pictureSource
+ fragmentShader: "
+ uniform sampler2D particleTexture;
+ uniform sampler2D pictureTexture;
+ varying highp vec2 fTex;
+ varying highp vec2 fTex2;
+ varying highp float fFade;
+ void main() {
+ gl_FragColor = texture2D(pictureTexture, fTex2) * texture2D(particleTexture, fTex).w * fFade;
+ }"
}
- TrailEmitter{
+ Emitter{
id: emitter
system: sys
emitting: false
- particleDuration: 4000
- maxParticles: 1200
+ lifeSpan: 4000
+ emitCap: 1200
anchors.fill: parent
- particleSize: 32
- speed: PointVector{ xVariation: 12; yVariation: 12 }
+ size: 32
+ speed: PointDirection{ xVariation: 12; yVariation: 12 }
}
MouseArea{
anchors.fill: parent