createCanvas(windowWidth, windowHeight, WEBGL)
capture = createCapture(VIDEO)
currComposite = createFramebuffer()
prevComposite = createFramebuffer()
currFrame = createFramebuffer()
prevFrame = createFramebuffer()
currDiff = createFramebuffer()
prevDiff = createFramebuffer()
frameMask = createFramebuffer()
opShader = createShader(...opShaderSource())
maskShader = createShader(...maskShaderSource())
[currComposite, prevComposite] = [prevComposite, currComposite];
[currFrame, prevFrame] = [prevFrame, currFrame];
[currDiff, prevDiff] = [prevDiff, currDiff];
image(capture, 0, 0, width, height, 0, 0, capture.width, capture.height, COVER)
opShader.setUniform('a', currFrame.color)
opShader.setUniform('b', prevFrame.color)
opShader.setUniform('op', OP_DIFFERENCE)
opShader.setUniform('a', currDiff.color)
opShader.setUniform('b', prevDiff.color)
opShader.setUniform('op', OP_SUBTRACT)
currComposite.draw(() => {
rotate(0.01 * sin(millis() * 0.001))
colorMode(HSB, 360, 100, 100)
tint(map(sin(millis() * 0.0002), -1, 1, 0, 360), 1, 100, 255)
image(prevComposite, 0, 0)
maskShader.setUniform('content', currFrame.color)
maskShader.setUniform('mask', frameMask.color)
image(currComposite, 0, 0)