function raster2D({ width, height, fill, dpr = window.devicePixelRatio || 1 }) {
const canvas = document.createElement("canvas");
const context = canvas.getContext("2d");
const scaledW = width * dpr;
const scaledH = height * dpr;
canvas.width = scaledW;
canvas.height = scaledH;
canvas.style.width = width + "px";
canvas.style.height = height + "px";
context.scale(dpr, dpr);
const imageData = context.getImageData(0, 0, scaledW, scaledH);
const data = imageData.data;
for (let i = 0; i < scaledW; i++) {
for (let j = 0; j < scaledH; j++) {
const x = map(i, 0, scaledW, 0, 1);
const y = map(j, 0, scaledH, 0, 1);
const color = fill(x, y, scaledW, scaledH);
if (color) {
const index = (j * scaledW + i) * 4;
const [r, g, b, a] = color;
data[index] = r;
data[index + 1] = g;
data[index + 2] = b;
data[index + 3] = a;
}
}
}
context.putImageData(imageData, 0, 0);
return canvas;
}