Code: Select all
main.js
const mainCanvas = document.getElementById("main-canvas");
const ctx = mainCanvas.getContext("2d");
let offscreenCanvas = document.getElementById("offscreen-canvas");
offscreeenCanvas = offscreenCanvas.tranferControlToOffscreen();
const worker = new Worker("worker.js");
worker.postMessage({type: "init", canvas: offscreenCanvas}, [offscreenCanvas]);
let workerIsDone = true;
function drawScene(objects){
renderForeground(ctx);
if (workerIsDone){
workerIsDone = false;
worker.postMessage({type:"render", objects: objects});
}
requestAnimationFrame(drawScene);
}
worker.onmessage = ()=> workerIsDone = true;
< /code>
//worker.js
let offscreenCanvas;
let ctx;
onmessage = (e) => {
if (e.data.type === 'init') {
const { canvas } = e.data;
offscreenCanvas = canvas;
ctx = offscreenCanvas.getContext('2d');
}
if (e.data.type === 'render' && ctx) {
renderBackground(ctx, e.data.objects);
postMessage("Worker is finished");
}
};