#version 440 layout(location = 0) in vec2 qt_TexCoord0; layout(location = 0) out vec4 fragColor; layout(std140, binding = 0) uniform buf { mat4 qt_Matrix; float qt_Opacity; float time; }; // High-quality pseudo-random function float rand(vec2 co) { return fract(sin(dot(co.xy ,vec2(12.9898,78.233))) * 43758.5453); } void main() { // Dynamic Noise based on Time // We add 'time' to the coordinate to animate the grain float noise = rand(qt_TexCoord0 + vec2(time * 0.01, time * 0.02)); // Output grayscale noise with alpha modulation // We want white noise, applied with qt_Opacity fragColor = vec4(noise, noise, noise, 1.0) * qt_Opacity; }