Files
tdesktop-dpi-fix-patch-example/Telegram/shaders/thanos_update.comp
T

54 lines
1.3 KiB
Plaintext

#version 450
layout(local_size_x = 64) in;
struct Particle {
vec2 offset;
vec2 velocity;
float lifetime;
float _pad;
};
layout(std430, binding = 0) buffer Particles {
Particle particles[];
};
layout(std140, binding = 1) uniform Params {
uint particleCountX;
uint particleCountY;
float phase;
float timeStep;
};
float easeInWindow(float fraction, float t) {
float windowSize = 0.8;
float windowStart = -windowSize;
float windowEnd = 1.0;
float windowPos = (1.0 - fraction) * windowStart + fraction * windowEnd;
float windowT = clamp(t - windowPos, 0.0, windowSize) / windowSize;
return 1.0 - windowT;
}
void main() {
uint gid = gl_GlobalInvocationID.x;
uint count = particleCountX * particleCountY;
if (gid >= count) {
return;
}
float easeInDuration = 0.8;
float effectFraction = clamp(phase, 0.0, easeInDuration) / easeInDuration;
uint particleX = gid % particleCountX;
float particleXFraction = float(particleX) / float(particleCountX);
float particleFraction = easeInWindow(effectFraction, particleXFraction);
Particle p = particles[gid];
p.offset += p.velocity * timeStep * particleFraction;
p.velocity.y += 80.0 * timeStep * particleFraction;
p.lifetime = max(0.0, p.lifetime - 0.6 * timeStep * particleFraction);
particles[gid] = p;
}