diff options
author | Kaj Grönholm <kaj.gronholm@qt.io> | 2020-11-09 14:44:16 +0200 |
---|---|---|
committer | Kaj Grönholm <kaj.gronholm@qt.io> | 2020-11-11 20:25:23 +0200 |
commit | 4771072d3c3bc2393f5bd3862375788cf154329b (patch) | |
tree | a3dbc5eb4a1c1cc79d8abd646994104da161bb4d /src/particles/shaders_ng | |
parent | fdbb97ff192756e7bd2d3595b0334d85b237d303 (diff) |
Add simpler non point particle level
Add one more PerformanceLevel which is similar to Color, except it
draws using triangles instead of points. This is optimal for d3d11
which doesn't support VertexShaderPointSize.
Also rename first levels to *Point to be clear.
Testing this on my windows laptop shows ~15% decrease in RAM usage
for imageparticle/colored example.
Task-number: QTBUG-88294
Change-Id: Ib93bc9fd0d2ef4f1cb8e0d9dcba0db652f288398
Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
Diffstat (limited to 'src/particles/shaders_ng')
17 files changed, 35 insertions, 15 deletions
diff --git a/src/particles/shaders_ng/compile.bat b/src/particles/shaders_ng/compile.bat index 334191bdf6..cc6ecb68d3 100755 --- a/src/particles/shaders_ng/compile.bat +++ b/src/particles/shaders_ng/compile.bat @@ -43,17 +43,22 @@ :: For SPIR-V the optimizer is requested (-O argument) which means spirv-opt must be :: invokable (e.g. because it's in the PATH from the Vulkan SDK) -qsb -b --glsl "150,120,100 es" --hlsl 50 --msl 12 -O -c -o imageparticle_simple.vert.qsb imageparticle.vert -qsb --glsl "150,120,100 es" --hlsl 50 --msl 12 -O -c -o imageparticle_simple.frag.qsb imageparticle.frag +qsb -DPOINT -b --glsl "150,120,100 es" --hlsl 50 --msl 12 -O -c -o imageparticle_simplepoint.vert.qsb imageparticle.vert +qsb -DPOINT --glsl "150,120,100 es" --hlsl 50 --msl 12 -O -c -o imageparticle_simplepoint.frag.qsb imageparticle.frag -qsb -DTABLE -DDEFORM -DCOLOR -b --glsl "150,120,100 es" --hlsl 50 --msl 12 -O -c -o imageparticle_tabled.vert.qsb imageparticle.vert -qsb -DTABLE -DDEFORM -DCOLOR --glsl "150,120,100 es" --hlsl 50 --msl 12 -O -c -o imageparticle_tabled.frag.qsb imageparticle.frag +qsb -DPOINT -DCOLOR -b --glsl "150,120,100 es" --hlsl 50 --msl 12 -O -c -o imageparticle_coloredpoint.vert.qsb imageparticle.vert +qsb -DPOINT -DCOLOR --glsl "150,120,100 es" --hlsl 50 --msl 12 -O -c -o imageparticle_coloredpoint.frag.qsb imageparticle.frag + +qsb -DCOLOR -b --glsl "150,120,100 es" --hlsl 50 --msl 12 -O -c -o imageparticle_colored.vert.qsb imageparticle.vert +qsb -DCOLOR --glsl "150,120,100 es" --hlsl 50 --msl 12 -O -c -o imageparticle_colored.frag.qsb imageparticle.frag qsb -DDEFORM -DCOLOR -b --glsl "150,120,100 es" --hlsl 50 --msl 12 -O -c -o imageparticle_deformed.vert.qsb imageparticle.vert qsb -DDEFORM -DCOLOR --glsl "150,120,100 es" --hlsl 50 --msl 12 -O -c -o imageparticle_deformed.frag.qsb imageparticle.frag +qsb -DTABLE -DDEFORM -DCOLOR -b --glsl "150,120,100 es" --hlsl 50 --msl 12 -O -c -o imageparticle_tabled.vert.qsb imageparticle.vert +qsb -DTABLE -DDEFORM -DCOLOR --glsl "150,120,100 es" --hlsl 50 --msl 12 -O -c -o imageparticle_tabled.frag.qsb imageparticle.frag + qsb -DSPRITE -DTABLE -DDEFORM -DCOLOR -b --zorder-loc 8 --glsl "150,120,100 es" --hlsl 50 --msl 12 -O -c -o imageparticle_sprite.vert.qsb imageparticle.vert qsb -DSPRITE -DTABLE -DDEFORM -DCOLOR --glsl "150,120,100 es" --hlsl 50 --msl 12 -O -c -o imageparticle_sprite.frag.qsb imageparticle.frag -qsb -DCOLOR -b --glsl "150,120,100 es" --hlsl 50 --msl 12 -O -c -o imageparticle_colored.vert.qsb imageparticle.vert -qsb -DCOLOR --glsl "150,120,100 es" --hlsl 50 --msl 12 -O -c -o imageparticle_colored.frag.qsb imageparticle.frag + diff --git a/src/particles/shaders_ng/imageparticle.frag b/src/particles/shaders_ng/imageparticle.frag index cefb7d2d75..89cdd48257 100644 --- a/src/particles/shaders_ng/imageparticle.frag +++ b/src/particles/shaders_ng/imageparticle.frag @@ -6,7 +6,7 @@ layout(location = 0) in vec2 tt; #if defined(SPRITE) layout(location = 1) in vec4 fTexS; -#elif defined(DEFORM) +#elif !defined(POINT) layout(location = 1) in vec2 fTex; #endif @@ -45,11 +45,11 @@ void main() * fColor * texture(colortable, tt) * ubuf.opacity; -#elif defined(DEFORM) +#elif !defined(POINT) fragColor = texture(_qt_texture, fTex) * fColor * ubuf.opacity; #elif defined(COLOR) fragColor = texture(_qt_texture, gl_PointCoord) * fColor * ubuf.opacity; -#else +#else // simple point fragColor = texture(_qt_texture, gl_PointCoord) * fFade * ubuf.opacity; #endif } diff --git a/src/particles/shaders_ng/imageparticle.vert b/src/particles/shaders_ng/imageparticle.vert index 124071e48e..420b2e2210 100644 --- a/src/particles/shaders_ng/imageparticle.vert +++ b/src/particles/shaders_ng/imageparticle.vert @@ -13,6 +13,10 @@ layout(location = 0) in vec2 vPos; layout(location = 3) in vec4 vColor; #endif +#if !defined(DEFORM) && !defined(POINT) // Color-level +layout(location = 4) in vec2 vTex; // x = tx, y = ty +#endif + #if defined(DEFORM) layout(location = 4) in vec4 vDeformVec; // x,y x unit vector; z,w = y unit vector layout(location = 5) in vec3 vTex; // x = tx, y = ty, z = bool autoRotate @@ -29,7 +33,7 @@ layout(location = 0) out vec2 tt; //y is progress if Sprite mode #if defined(SPRITE) layout(location = 1) out vec4 fTexS; -#elif defined(DEFORM) +#elif !defined(POINT) layout(location = 1) out vec2 fTex; #endif @@ -56,8 +60,10 @@ void main() if (t < 0. || t > 1.) { #if defined(DEFORM) gl_Position = ubuf.matrix * vec4(vPosRot.x, vPosRot.y, 0., 1.); -#else +#elif defined(POINT) gl_PointSize = 0.; +#else + gl_Position = ubuf.matrix * vec4(vPos.x, vPos.y, 0., 1.); #endif } else { #if defined(SPRITE) @@ -69,7 +75,7 @@ void main() // Next frame is also passed, for interpolation fTexS.zw = vAnimPos.zy + vTex.xy * vAnimData.xy; -#elif defined(DEFORM) +#elif !defined(POINT) fTex = vTex.xy; #endif float currentSize = mix(vData.z, vData.w, t * t); @@ -90,9 +96,12 @@ void main() if (currentSize <= 0.) { #if defined(DEFORM) gl_Position = ubuf.matrix * vec4(vPosRot.x, vPosRot.y, 0., 1.); -#else +#elif defined(POINT) gl_PointSize = 0.; +#else + gl_Position = ubuf.matrix * vec4(vPos.x, vPos.y, 0., 1.); #endif + } else { if (currentSize < 3.) // Sizes too small look jittery as they move currentSize = 3.; @@ -124,11 +133,17 @@ void main() + rotatedDeform.zw + vVec.xy * t * vData.y // apply velocity + 0.5 * vVec.zw * pow(t * vData.y, 2.); // apply acceleration -#else - pos = vPos +#elif defined(POINT) + pos = vPos.xy + vVec.xy * t * vData.y // apply velocity vector.. + 0.5 * vVec.zw * pow(t * vData.y, 2.); gl_PointSize = currentSize; +#else // non point color + vec2 deform = currentSize * (vTex.xy - 0.5); + pos = vPos.xy + + deform.xy + + vVec.xy * t * vData.y // apply velocity + + 0.5 * vVec.zw * pow(t * vData.y, 2.); // apply acceleration #endif gl_Position = ubuf.matrix * vec4(pos.x, pos.y, 0, 1); diff --git a/src/particles/shaders_ng/imageparticle_colored.frag.qsb b/src/particles/shaders_ng/imageparticle_colored.frag.qsb Binary files differindex 84ba3262eb..0cde86cd8f 100644 --- a/src/particles/shaders_ng/imageparticle_colored.frag.qsb +++ b/src/particles/shaders_ng/imageparticle_colored.frag.qsb diff --git a/src/particles/shaders_ng/imageparticle_colored.vert.qsb b/src/particles/shaders_ng/imageparticle_colored.vert.qsb Binary files differindex 293cc7ea4e..77549dd5f0 100644 --- a/src/particles/shaders_ng/imageparticle_colored.vert.qsb +++ b/src/particles/shaders_ng/imageparticle_colored.vert.qsb diff --git a/src/particles/shaders_ng/imageparticle_coloredpoint.frag.qsb b/src/particles/shaders_ng/imageparticle_coloredpoint.frag.qsb Binary files differnew file mode 100644 index 0000000000..f30633eec9 --- /dev/null +++ b/src/particles/shaders_ng/imageparticle_coloredpoint.frag.qsb diff --git a/src/particles/shaders_ng/imageparticle_coloredpoint.vert.qsb b/src/particles/shaders_ng/imageparticle_coloredpoint.vert.qsb Binary files differnew file mode 100644 index 0000000000..3c92bc2f63 --- /dev/null +++ b/src/particles/shaders_ng/imageparticle_coloredpoint.vert.qsb diff --git a/src/particles/shaders_ng/imageparticle_deformed.frag.qsb b/src/particles/shaders_ng/imageparticle_deformed.frag.qsb Binary files differindex 02179080fa..00ebda56a9 100644 --- a/src/particles/shaders_ng/imageparticle_deformed.frag.qsb +++ b/src/particles/shaders_ng/imageparticle_deformed.frag.qsb diff --git a/src/particles/shaders_ng/imageparticle_deformed.vert.qsb b/src/particles/shaders_ng/imageparticle_deformed.vert.qsb Binary files differindex d67cb043bb..378e9ba876 100644 --- a/src/particles/shaders_ng/imageparticle_deformed.vert.qsb +++ b/src/particles/shaders_ng/imageparticle_deformed.vert.qsb diff --git a/src/particles/shaders_ng/imageparticle_simple.frag.qsb b/src/particles/shaders_ng/imageparticle_simple.frag.qsb Binary files differdeleted file mode 100644 index e781a1d7a8..0000000000 --- a/src/particles/shaders_ng/imageparticle_simple.frag.qsb +++ /dev/null diff --git a/src/particles/shaders_ng/imageparticle_simple.vert.qsb b/src/particles/shaders_ng/imageparticle_simple.vert.qsb Binary files differdeleted file mode 100644 index a2e0df027b..0000000000 --- a/src/particles/shaders_ng/imageparticle_simple.vert.qsb +++ /dev/null diff --git a/src/particles/shaders_ng/imageparticle_simplepoint.frag.qsb b/src/particles/shaders_ng/imageparticle_simplepoint.frag.qsb Binary files differnew file mode 100644 index 0000000000..738be48b91 --- /dev/null +++ b/src/particles/shaders_ng/imageparticle_simplepoint.frag.qsb diff --git a/src/particles/shaders_ng/imageparticle_simplepoint.vert.qsb b/src/particles/shaders_ng/imageparticle_simplepoint.vert.qsb Binary files differnew file mode 100644 index 0000000000..a53868d4a5 --- /dev/null +++ b/src/particles/shaders_ng/imageparticle_simplepoint.vert.qsb diff --git a/src/particles/shaders_ng/imageparticle_sprite.frag.qsb b/src/particles/shaders_ng/imageparticle_sprite.frag.qsb Binary files differindex b720360a1b..53f7592520 100644 --- a/src/particles/shaders_ng/imageparticle_sprite.frag.qsb +++ b/src/particles/shaders_ng/imageparticle_sprite.frag.qsb diff --git a/src/particles/shaders_ng/imageparticle_sprite.vert.qsb b/src/particles/shaders_ng/imageparticle_sprite.vert.qsb Binary files differindex 284f610f51..8d0efb05c3 100644 --- a/src/particles/shaders_ng/imageparticle_sprite.vert.qsb +++ b/src/particles/shaders_ng/imageparticle_sprite.vert.qsb diff --git a/src/particles/shaders_ng/imageparticle_tabled.frag.qsb b/src/particles/shaders_ng/imageparticle_tabled.frag.qsb Binary files differindex c4ca41814b..788063044e 100644 --- a/src/particles/shaders_ng/imageparticle_tabled.frag.qsb +++ b/src/particles/shaders_ng/imageparticle_tabled.frag.qsb diff --git a/src/particles/shaders_ng/imageparticle_tabled.vert.qsb b/src/particles/shaders_ng/imageparticle_tabled.vert.qsb Binary files differindex 91955cb521..2027b0ecfa 100644 --- a/src/particles/shaders_ng/imageparticle_tabled.vert.qsb +++ b/src/particles/shaders_ng/imageparticle_tabled.vert.qsb |