/*{
"DESCRIPTION": "",
"CREDIT": "by VIDVOX",
"ISFVSN": "2",
"CATEGORIES": [
"Glitch", "Color Effect"
],
"INPUTS": [
{
"NAME": "inputImage",
"TYPE": "image"
},
{
"NAME": "horizontal_magnitude",
"TYPE": "float",
"MIN": 0.00,
"MAX": 1.0,
"DEFAULT": 0.125
},
{
"NAME": "vertical_magnitude",
"TYPE": "float",
"MIN": 0.00,
"MAX": 1.0,
"DEFAULT": 0.125
},
{
"NAME": "color_magnitude",
"TYPE": "float",
"MIN": 0.00,
"MAX": 2.0,
"DEFAULT": 1.0
},
{
"NAME": "mode",
"VALUES": [
0,
1,
2,
3
],
"LABELS": [
"add",
"add mod",
"multiply",
"difference"
],
"DEFAULT": 0,
"TYPE": "long"
}
]
}*/
// adapted from maxilla inc's https://github.com/maxillacult/ofxPostGlitch/
float rand(vec2 co){
return fract(sin(dot(co.xy ,vec2(12.9898,78.233))) * 43758.5453);
}
void main()
{
vec2 texCoord = isf_FragNormCoord;
vec4 col = IMG_NORM_PIXEL(inputImage,texCoord);
vec4 col_r = vec4(0.0);
vec4 col_l = vec4(0.0);
vec4 col_g = vec4(0.0);
vec2 rand_offset = texCoord + vec2((horizontal_magnitude * rand(vec2(TIME,0.213))-horizontal_magnitude/2.0), (vertical_magnitude * rand(vec2(TIME,0.463467))) - vertical_magnitude / 2.0);
col_r = IMG_NORM_PIXEL(inputImage,rand_offset);
rand_offset = texCoord + vec2((horizontal_magnitude * rand(vec2(TIME,0.5345))-horizontal_magnitude/2.0), (vertical_magnitude * rand(vec2(TIME,0.7875))) - vertical_magnitude / 2.0);
col_l = IMG_NORM_PIXEL(inputImage,rand_offset);
rand_offset = texCoord + vec2((horizontal_magnitude * rand(vec2(TIME,0.456345))-horizontal_magnitude/2.0), (vertical_magnitude * rand(vec2(TIME,0.9432))) - vertical_magnitude / 2.0);
col_g = IMG_NORM_PIXEL(inputImage,rand_offset);
vec4 color_shift;
color_shift.b = color_magnitude*col_r.b*max(1.0,sin(texCoord.y*1.2)*2.5)*rand(vec2(TIME,0.0342));
color_shift.r = color_magnitude*col_l.r*max(1.0,sin(texCoord.y*1.2)*2.5)*rand(vec2(TIME,0.5253));
color_shift.g = color_magnitude*col_g.g*max(1.0,sin(texCoord.y*1.2)*2.5)*rand(vec2(TIME,0.1943));
// if doing add maths
if (mode == 0) {
col = col + color_shift;
}
// add mod
else if (mode == 1) {
col = mod(col + color_shift,1.001);
}
// multiply
else if (mode == 2) {
col = mix(col, col * (color_magnitude + color_shift),0.9);
}
// difference
else if (mode == 3) {
col = abs(color_shift - col);
}
gl_FragColor = col;
}