import { mountFlex } from "https://cdn.jsdelivr.net/npm/p5.flex@0.2.0/src/p5.flex.min.mjs"
import { vert, frag, filterFrag } from "./shader.js"
const CANVAS_SIZE = [WIDTH, HEIGHT]
const TEXEL_SIZE = [1 / (WIDTH * PIXEL_DENSITY), 1 / (HEIGHT * PIXEL_DENSITY)]
let nativeShader, filterShader
let nativeLayer, bufferLayer, filterLayer
Taiwan = p.loadImage("./Taiwan.png")
Flower = p.loadImage("./Prunus_mume.jpg")
;[WIDTH, HEIGHT] = [Taiwan.width, Taiwan.height]
p.createCanvas(WIDTH, HEIGHT)
p.flex({ container: { padding: "20px" }, canvas: { fit: p.SCALE_DOWN } })
p.pixelDensity(PIXEL_DENSITY)
nativeLayer = p.createGraphics(WIDTH, HEIGHT, p.WEBGL)
bufferLayer = p.createGraphics(WIDTH, HEIGHT)
filterLayer = p.createGraphics(WIDTH, HEIGHT, p.WEBGL)
nativeShader = p.createShader(vert, frag)
filterShader = p.createShader(vert, filterFrag)
bufferLayer.image(Flower, 0, 0, WIDTH, HEIGHT)
setShader(nativeLayer, nativeShader, bufferLayer)
bufferLayer.image(nativeLayer, 0, 0)
setShader(filterLayer, filterShader, bufferLayer)
p.image(filterLayer, 0, 0)
const setShader = (canvas, shader, buffer) => {
shader.setUniform("tex0", buffer)
shader.setUniform("canvasSize", CANVAS_SIZE)
shader.setUniform("texelSize", TEXEL_SIZE)
shader.setUniform("mouse", [p.mouseX / WIDTH, p.mouseY / HEIGHT])
shader.setUniform("time", p.frameCount)
shader.setUniform("iTaiwan", Taiwan)
canvas.quad(-1, 1, 1, 1, 1, -1, -1, -1)
p.keyPressed = () => (p.key === " " && (STOP = !STOP) ? p.noLoop() : p.loop())