#version 300 es precision highp float; in vec2 v_texcoord; uniform sampler2D tex; out vec4 fragColor; float rand(vec2 co) { return fract(sin(dot(co, vec2(12.9898, 78.233))) * 43758.5453); } void main() { vec4 c = texture(tex, v_texcoord); float grain = rand(v_texcoord) * 0.08 - 0.04; c.rgb += grain; fragColor = clamp(c, 0.0, 1.0); }