async function renderImage(size, getPixelColor, visibility) {
await visibility();
const ctx = DOM.context2d(size.w, size.h, 1);
const imgData = ctx.getImageData(0, 0, size.w, size.h);
const pxs = imgData.data;
for (let i = 0; i < pxs.length; i += 4) {
const [x, y] = [(i/4)%size.w, Math.floor((i/4)/size.w)];
const [u, v] = [x/size.w, y/size.h];
const color = getPixelColor(u, v);
const [r, g, b] = vecToRgb(color);
[pxs[i], pxs[i + 1], pxs[i + 2], pxs[i + 3]] = [r, g, b, 255]
}
ctx.putImageData(imgData, 0, 0);
return ctx.canvas;
}