Creates linear gradients between two random points across RGB channels every time ‘Trigger’ is clicked.
CIFilter Kernel Code (top panel)
kernel vec4 combineChannels(sampler ImageR, sampler ImageG, sampler ImageB) { float R = sample(ImageR, samplerCoord(ImageR)).r; float G = sample(ImageG, samplerCoord(ImageG)).r; float B = sample(ImageB, samplerCoord(ImageB)).r; return vec4(R, G, B, 1.0); }
Javascript (bottom panel)
function __image main(__boolean Trigger) { var dims = new Vec(256,256); var gradDims = new Vec(0,0,dims.x,dims.y); var black = new Vec(0,0,0,1); var white = new Vec(1,1,1,1); var p0 = new Vec(Math.random() * dims.x, Math.random() * dims.y); var p1 = new Vec(Math.random() * dims.x, Math.random() * dims.y); var gradR = Filter.CILinearGradient(p0, p1, black, white); gradR = Filter.CICrop(gradR, gradDims); p0 = new Vec(Math.random() * dims.x, Math.random() * dims.y); p1 = new Vec(Math.random() * dims.x, Math.random() * dims.y); var gradG = Filter.CILinearGradient(p0, p1, black, white); gradG = Filter.CICrop(gradG, gradDims); p0 = new Vec(Math.random() * dims.x, Math.random() * dims.y); p1 = new Vec(Math.random() * dims.x, Math.random() * dims.y); var gradB = Filter.CILinearGradient(p0, p1, black, white); gradB = Filter.CICrop(gradB, gradDims); // Call kernel function and return result return combineChannels.apply(gradR.definition, null, gradR, gradG, gradB); }