aboutsummaryrefslogtreecommitdiffstats
path: root/src/declarative/particles/defaultshaders/coloredvertex.shader
diff options
context:
space:
mode:
Diffstat (limited to 'src/declarative/particles/defaultshaders/coloredvertex.shader')
-rw-r--r--src/declarative/particles/defaultshaders/coloredvertex.shader44
1 files changed, 44 insertions, 0 deletions
diff --git a/src/declarative/particles/defaultshaders/coloredvertex.shader b/src/declarative/particles/defaultshaders/coloredvertex.shader
new file mode 100644
index 0000000000..5b8339276c
--- /dev/null
+++ b/src/declarative/particles/defaultshaders/coloredvertex.shader
@@ -0,0 +1,44 @@
+attribute highp vec2 vPos;
+attribute highp vec4 vData; // x = time, y = lifeSpan, z = size, w = endSize
+attribute highp vec4 vVec; // x,y = constant speed, z,w = acceleration
+attribute lowp vec4 vColor;
+
+uniform highp mat4 qt_Matrix;
+uniform highp float timestamp;
+uniform highp float entry;
+
+varying lowp vec4 fColor;
+
+void main() {
+ 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.;
+
+ lowp float fFade = 1.;
+
+ if (entry == 1.){
+ highp float fadeIn = min(t * 10., 1.);
+ highp float fadeOut = 1. - max(0., min((t - 0.75) * 4., 1.));
+ fFade = fadeIn * fadeOut;
+ }else if(entry == 2.){
+ highp float sizeIn = min(t * 10., 1.);
+ highp float sizeOut = 1. - max(0., min((t - 0.75) * 4., 1.));
+ currentSize = currentSize * sizeIn * sizeOut;
+ }
+
+ gl_PointSize = currentSize;
+
+ highp vec2 pos = vPos
+ + vVec.xy * t * vData.y // apply speed vector..
+ + 0.5 * vVec.zw * pow(t * vData.y, 2.);
+
+ gl_Position = qt_Matrix * vec4(pos.x, pos.y, 0, 1);
+
+ fColor = vColor * (fFade);
+}