#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;
}
