import { mountFlex } from "https://cdn.jsdelivr.net/npm/p5.flex@0.2.0/src/p5.flex.min.mjs"
import { mountGrid } from "./Grid.js"
import { vert, frag, filterFrag } from "./shader.js"
import { PaletteFrom } from "./tools.js"
import colorURLs from "./colorURLs.js"
const [WIDTH, HEIGHT] = [600, 600]
const CANVAS_SIZE = [WIDTH, HEIGHT]
const TEXEL_SIZE = [1 / (WIDTH * PIXEL_DENSITY), 1 / (HEIGHT * PIXEL_DENSITY)]
let Buffer, WebGL, Filter
let theShader, theFilterShader
const cols = p.random([1, 2, 3, 4, 5])
const rows = p.random([1, 2, 3, 4, 5])
const gridW = WIDTH - padding * 2
const gridH = HEIGHT - padding * 2
const palette = PaletteFrom(p.random(colorURLs))
const [bgColor, bdColor] = p.shuffle(["#E0E0E0", "#131313"])
p.createCanvas(WIDTH, HEIGHT)
p.flex({ container: { padding: "20px" }, canvas: { fit: p.SCALE_DOWN } })
p.pixelDensity(PIXEL_DENSITY)
Buffer = p.createGraphics(WIDTH, HEIGHT)
WebGL = p.createGraphics(WIDTH, HEIGHT, p.WEBGL)
Filter = p.createGraphics(WIDTH, HEIGHT, p.WEBGL)
theShader = p.createShader(vert, frag)
theFilterShader = p.createShader(vert, filterFrag)
gs = Buffer.Grid({ cols, rows, gridW, gridH })
p.describe(`"Crevice" by Zaron Chen, for Break It Down 🔨 #WCCChallenge`)
Buffer.background(bgColor)
theShader.setUniform("tex0", Buffer)
theShader.setUniform("canvasSize", CANVAS_SIZE)
theShader.setUniform("texelSize", TEXEL_SIZE)
theShader.setUniform("mouse", [p.mouseX / WIDTH, p.mouseY / HEIGHT])
theShader.setUniform("time", p.frameCount)
theShader.setUniform("grid", [cols, rows])
theShader.setUniform("gridSize", [gs.gridW, gs.gridH])
WebGL.quad(-1, 1, 1, 1, 1, -1, -1, -1)
Buffer.translate(padding, padding)
Buffer.image(WebGL, 0, 0)
Filter.shader(theFilterShader)
theFilterShader.setUniform("tex0", Buffer)
Filter.quad(-1, 1, 1, 1, 1, -1, -1, -1)
p.frameCount > 300 && p.noLoop()
const content = ({ id, w, h }) => {
const rnd = Buffer.random
Buffer.translate(w / 2, h / 2)
Buffer.randomSeed(id * 1000)
Buffer.fill(rnd(palette))
Buffer.rectMode(p.CENTER)
Buffer.imageMode(p.CENTER)
if (cols === rows && rnd() < 0.2) Buffer.ellipse(0, 0, wid, hei)
Buffer.rect(0, 0, wid, hei, ...radius)
const Border = (color, weight) => {
p.strokeWeight(weight * 2)
p.rect(WIDTH / 2, HEIGHT / 2, WIDTH, HEIGHT)