/*{ "CATEGORIES": [ "Glitch" ], "CREDIT": "by VIDVOX", "DESCRIPTION": "Pixels update only if within range of the specified lines to create a slit scan style", "INPUTS": [ { "NAME": "inputImage", "TYPE": "image" }, { "DEFAULT": 1, "MAX": 1.5, "MIN": 0, "NAME": "spacing", "TYPE": "float" }, { "DEFAULT": 0.33, "MAX": 1, "MIN": 0, "NAME": "line_width", "TYPE": "float" }, { "DEFAULT": 0.25, "MAX": 1, "MIN": -1, "NAME": "angle", "TYPE": "float" }, { "DEFAULT": 0.5, "MAX": 1, "MIN": 0, "NAME": "shift", "TYPE": "float" } ], "ISFVSN": "2", "PASSES": [ { "PERSISTENT": true, "TARGET": "bufferVariableNameA" } ] } */ const float pi = 3.14159265359; float pattern() { float s = sin(angle * pi); float c = cos(angle * pi); vec2 tex = isf_FragNormCoord * RENDERSIZE; float spaced = length(RENDERSIZE) * spacing; vec2 point = vec2( c * tex.x - s * tex.y, s * tex.x + c * tex.y ) * max(1.0/spaced,0.001); float d = point.y; float w = line_width; if (w > spacing) { w = 0.99*spacing; } return ( mod(d + shift*spacing + w * 0.5,spacing) ); } void main() { vec4 freshPixel = IMG_PIXEL(inputImage,gl_FragCoord.xy); // If we're on the line, update, otherwise use the stale pixel vec4 result = IMG_PIXEL(bufferVariableNameA,gl_FragCoord.xy); float pat = pattern(); float w = line_width; if (w > spacing) { w = 0.99*spacing; } if ((pat > 0.0)&&(pat <= w)) { float percent = (1.0-abs(w-2.0*pat)/w); percent = clamp(percent,0.0,1.0); result = mix(result, freshPixel, percent); //result = vec4(percent,percent,percent,1.0); } gl_FragColor = result; }