aboutsummaryrefslogtreecommitdiffstats
path: root/src/particles/shaders_ng
diff options
context:
space:
mode:
authorKaj Grönholm <kaj.gronholm@qt.io>2020-11-06 12:56:36 +0200
committerKaj Grönholm <kaj.gronholm@qt.io>2020-11-09 19:35:40 +0200
commitebe36705223d00bfe92c7b8fc391e97895ba1155 (patch)
treefffaa9c2ca30454cd3155447c11452d755b0622f /src/particles/shaders_ng
parent1df1167ff1226637cf659debaa3296f03f4a3994 (diff)
Optimize particles vertex data
Use uchar instead of float for vertex data that doesn't need float. Continue using floats in shaders. Also remove animY2, which is same as animY1. These changes reduce memory usage especially when the amount of particles increases. Testing on windows, memory reductions with emitters/trailemitter example were: - OpenGL: 82.7 MB -> 76.5 MB - Vulkan: 130.8 MB -> 126.3 MB - D3D11: 143.7 MB -> 135.8 MB Task-number: QTBUG-88124 Change-Id: I8f8dcb3845323b0e69fb99b5bff830cd0f151a47 Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io> Reviewed-by: Tomi Korpipää <tomi.korpipaa@qt.io>
Diffstat (limited to 'src/particles/shaders_ng')
-rw-r--r--src/particles/shaders_ng/imageparticle.vert24
-rw-r--r--src/particles/shaders_ng/imageparticle_colored.frag.qsbbin1634 -> 1638 bytes
-rw-r--r--src/particles/shaders_ng/imageparticle_colored.vert.qsbbin3451 -> 3438 bytes
-rw-r--r--src/particles/shaders_ng/imageparticle_deformed.frag.qsbbin1654 -> 1653 bytes
-rw-r--r--src/particles/shaders_ng/imageparticle_deformed.vert.qsbbin5352 -> 5356 bytes
-rw-r--r--src/particles/shaders_ng/imageparticle_simple.frag.qsbbin1639 -> 1644 bytes
-rw-r--r--src/particles/shaders_ng/imageparticle_simple.vert.qsbbin3449 -> 3448 bytes
-rw-r--r--src/particles/shaders_ng/imageparticle_sprite.frag.qsbbin1964 -> 1974 bytes
-rw-r--r--src/particles/shaders_ng/imageparticle_sprite.vert.qsbbin5997 -> 5995 bytes
-rw-r--r--src/particles/shaders_ng/imageparticle_tabled.frag.qsbbin1833 -> 1841 bytes
-rw-r--r--src/particles/shaders_ng/imageparticle_tabled.vert.qsbbin5673 -> 5652 bytes
11 files changed, 12 insertions, 12 deletions
diff --git a/src/particles/shaders_ng/imageparticle.vert b/src/particles/shaders_ng/imageparticle.vert
index 870139452b..124071e48e 100644
--- a/src/particles/shaders_ng/imageparticle.vert
+++ b/src/particles/shaders_ng/imageparticle.vert
@@ -4,7 +4,7 @@ layout(location = 1) in vec4 vData; // x = time, y = lifeSpan, z = size, w = end
layout(location = 2) in vec4 vVec; // x,y = constant velocity, z,w = acceleration
#if defined(DEFORM)
-layout(location = 0) in vec4 vPosTex;
+layout(location = 0) in vec4 vPosRot; //x = x, y = y, z = radians of rotation, w = rotation velocity
#else
layout(location = 0) in vec2 vPos;
#endif
@@ -15,12 +15,12 @@ layout(location = 3) in vec4 vColor;
#if defined(DEFORM)
layout(location = 4) in vec4 vDeformVec; // x,y x unit vector; z,w = y unit vector
-layout(location = 5) in vec3 vRotation; // x = radians of rotation, y = rotation velocity, z = bool autoRotate
+layout(location = 5) in vec3 vTex; // x = tx, y = ty, z = bool autoRotate
#endif
#if defined(SPRITE)
layout(location = 6) in vec3 vAnimData; // w,h(premultiplied of anim), interpolation progress
-layout(location = 7) in vec4 vAnimPos; // x,y, x,y (two frames for interpolation)
+layout(location = 7) in vec3 vAnimPos; // x, y, x2 (two frames for interpolation)
#endif
#if defined(TABLE)
@@ -55,7 +55,7 @@ void main()
float t = (ubuf.timestamp - vData.x) / vData.y;
if (t < 0. || t > 1.) {
#if defined(DEFORM)
- gl_Position = ubuf.matrix * vec4(vPosTex.x, vPosTex.y, 0., 1.);
+ gl_Position = ubuf.matrix * vec4(vPosRot.x, vPosRot.y, 0., 1.);
#else
gl_PointSize = 0.;
#endif
@@ -64,13 +64,13 @@ void main()
tt.y = vAnimData.z;
// Calculate frame location in texture
- fTexS.xy = vAnimPos.xy + vPosTex.zw * vAnimData.xy;
+ fTexS.xy = vAnimPos.xy + vTex.xy * vAnimData.xy;
// Next frame is also passed, for interpolation
- fTexS.zw = vAnimPos.zw + vPosTex.zw * vAnimData.xy;
+ fTexS.zw = vAnimPos.zy + vTex.xy * vAnimData.xy;
#elif defined(DEFORM)
- fTex = vPosTex.zw;
+ fTex = vTex.xy;
#endif
float currentSize = mix(vData.z, vData.w, t * t);
float fade = 1.;
@@ -89,7 +89,7 @@ void main()
if (currentSize <= 0.) {
#if defined(DEFORM)
- gl_Position = ubuf.matrix * vec4(vPosTex.x, vPosTex.y, 0., 1.);
+ gl_Position = ubuf.matrix * vec4(vPosRot.x, vPosRot.y, 0., 1.);
#else
gl_PointSize = 0.;
#endif
@@ -99,14 +99,14 @@ void main()
vec2 pos;
#if defined(DEFORM)
- float rotation = vRotation.x + vRotation.y * t * vData.y;
- if (vRotation.z == 1.0) {
+ float rotation = vPosRot.z + vPosRot.w * t * vData.y;
+ if (vTex.z > 0.) {
vec2 curVel = vVec.zw * t * vData.y + vVec.xy;
if (length(curVel) > 0.)
rotation += atan(curVel.y, curVel.x);
}
vec2 trigCalcs = vec2(cos(rotation), sin(rotation));
- vec4 deform = vDeformVec * currentSize * (vPosTex.zzww - 0.5);
+ vec4 deform = vDeformVec * currentSize * (vTex.xxyy - 0.5);
vec4 rotatedDeform = deform.xxzz * trigCalcs.xyxy;
rotatedDeform = rotatedDeform + (deform.yyww * trigCalcs.yxyx * vec4(-1.,1.,-1.,1.));
/* The readable version:
@@ -119,7 +119,7 @@ void main()
yRotatedDeform.x = trigCalcs.x*yDeform.x - trigCalcs.y*yDeform.y;
yRotatedDeform.y = trigCalcs.y*yDeform.x + trigCalcs.x*yDeform.y;
*/
- pos = vPosTex.xy
+ pos = vPosRot.xy
+ rotatedDeform.xy
+ rotatedDeform.zw
+ vVec.xy * t * vData.y // apply velocity
diff --git a/src/particles/shaders_ng/imageparticle_colored.frag.qsb b/src/particles/shaders_ng/imageparticle_colored.frag.qsb
index 72e517c0ee..84ba3262eb 100644
--- a/src/particles/shaders_ng/imageparticle_colored.frag.qsb
+++ b/src/particles/shaders_ng/imageparticle_colored.frag.qsb
Binary files differ
diff --git a/src/particles/shaders_ng/imageparticle_colored.vert.qsb b/src/particles/shaders_ng/imageparticle_colored.vert.qsb
index a18b222b61..293cc7ea4e 100644
--- a/src/particles/shaders_ng/imageparticle_colored.vert.qsb
+++ b/src/particles/shaders_ng/imageparticle_colored.vert.qsb
Binary files differ
diff --git a/src/particles/shaders_ng/imageparticle_deformed.frag.qsb b/src/particles/shaders_ng/imageparticle_deformed.frag.qsb
index 3107cfeddd..02179080fa 100644
--- a/src/particles/shaders_ng/imageparticle_deformed.frag.qsb
+++ b/src/particles/shaders_ng/imageparticle_deformed.frag.qsb
Binary files differ
diff --git a/src/particles/shaders_ng/imageparticle_deformed.vert.qsb b/src/particles/shaders_ng/imageparticle_deformed.vert.qsb
index b4a701e9fb..d67cb043bb 100644
--- a/src/particles/shaders_ng/imageparticle_deformed.vert.qsb
+++ b/src/particles/shaders_ng/imageparticle_deformed.vert.qsb
Binary files differ
diff --git a/src/particles/shaders_ng/imageparticle_simple.frag.qsb b/src/particles/shaders_ng/imageparticle_simple.frag.qsb
index 79e81fa479..e781a1d7a8 100644
--- a/src/particles/shaders_ng/imageparticle_simple.frag.qsb
+++ b/src/particles/shaders_ng/imageparticle_simple.frag.qsb
Binary files differ
diff --git a/src/particles/shaders_ng/imageparticle_simple.vert.qsb b/src/particles/shaders_ng/imageparticle_simple.vert.qsb
index 4e1d4c0423..a2e0df027b 100644
--- a/src/particles/shaders_ng/imageparticle_simple.vert.qsb
+++ b/src/particles/shaders_ng/imageparticle_simple.vert.qsb
Binary files differ
diff --git a/src/particles/shaders_ng/imageparticle_sprite.frag.qsb b/src/particles/shaders_ng/imageparticle_sprite.frag.qsb
index 05858b1e1e..b720360a1b 100644
--- a/src/particles/shaders_ng/imageparticle_sprite.frag.qsb
+++ b/src/particles/shaders_ng/imageparticle_sprite.frag.qsb
Binary files differ
diff --git a/src/particles/shaders_ng/imageparticle_sprite.vert.qsb b/src/particles/shaders_ng/imageparticle_sprite.vert.qsb
index 4054a0268e..284f610f51 100644
--- a/src/particles/shaders_ng/imageparticle_sprite.vert.qsb
+++ b/src/particles/shaders_ng/imageparticle_sprite.vert.qsb
Binary files differ
diff --git a/src/particles/shaders_ng/imageparticle_tabled.frag.qsb b/src/particles/shaders_ng/imageparticle_tabled.frag.qsb
index 35da4df2f4..c4ca41814b 100644
--- a/src/particles/shaders_ng/imageparticle_tabled.frag.qsb
+++ b/src/particles/shaders_ng/imageparticle_tabled.frag.qsb
Binary files differ
diff --git a/src/particles/shaders_ng/imageparticle_tabled.vert.qsb b/src/particles/shaders_ng/imageparticle_tabled.vert.qsb
index c8be30f414..91955cb521 100644
--- a/src/particles/shaders_ng/imageparticle_tabled.vert.qsb
+++ b/src/particles/shaders_ng/imageparticle_tabled.vert.qsb
Binary files differ