#ifndef FILM_GRAIN
#define FILM_GRAIN

#pragma parameter ia_GRAIN_STR "Grain Strength" 0.0 0.0 72.0 3.0

#include "col_tools.h"

//https://www.shadertoy.com/view/4sXSWs strength= 16.0
vec3 rgb_grain(vec2 uv, float strength, uint counter){       
    float x = ((uv.x + 4.0 ) * (uv.y + 5.0 ) * ((mod(vec2(counter, counter).x, 800.0) + 10.0) * 8.0));
    float y = ((uv.x + 5.0 ) * (uv.y + 6.0 ) * ((mod(vec2(counter, counter).x, 678.0) + 8.0) * 6.0));
    float z = ((uv.x + 6.0 ) * (uv.y + 4.0 ) * ((mod(vec2(counter, counter).x, 498.0) + 6.0) * 10.0));
    float r = (mod((mod(x, 13.0) + 1.0) * (mod(x, 123.0) + 1.0), 0.01)-0.005);
    float g = (mod((mod(y, 13.0) + 1.0) * (mod(y, 123.0) + 1.0), 0.01)-0.005);
    float b = (mod((mod(z, 13.0) + 1.0) * (mod(z, 123.0) + 1.0), 0.01)-0.005);
	return  vec3(r, g, b) * strength;
}

vec3 luma_grain(vec3 in_col, vec2 uv, float strength, uint counter){
    float x = (uv.x + 4.0 ) * (uv.y + 4.0 ) * ((mod(vec2(counter, counter).x, 800.0) + 10.0) * 10.0);
	 x = (mod((mod(x, 13.0) + 1.0) * (mod(x, 123.0) + 1.0), 0.01)-0.005) * strength;
	 vec3 out_col = RGBtoYIQ(in_col);
	 out_col.r += x;
	 return YIQtoRGB(out_col);
}

#endif