Copyright GENIUS
An offscreen canvas is a canvas that is not visible on the screen. It can be used to construct the contents of a canvas prior to displaying the contents.
An offscreen canvas is just a canvas element. To create a canvas element we use the code below:
var offscreenCanvas = document.createElement('canvas');
As with any other canvas, we can associate a 2d graphic context with an offscreen canvas, as shown in the code below
var offscreenCanvasCtx = offscreenCanvas.getContext('2d');
We need to ensure that the offscreen canvas is the exact same size as the on-screen canvas that it is being associated with, as shown below:
offscreenCanvas.width = canvas.width; offscreenCanvas.height = canvas.height;
To draw an offscreen canvas onto another canvas, pass the offscreen canvas name as the element to be drawn, as shown below:
ctx.drawImage(offscreenCanvas,0, 0, width, height); // draw the offscreen canvas and not the graphic context
Example of an offscreen canvas (Run Example)
<!-- Author: Derek O Reilly, Dundalk Institute of Technology, Ireland. -->
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>GENIUS worked example</title>
<style>
#gameCanvas
{
/* the canvas styling usually does not change */
outline:1px solid darkgrey;
width:500px;
height:500px;
}
</style>
</head>
<body>
<canvas id = 'gameCanvas'></canvas>
<script>
let cityImage = new Image();
cityImage.src = "images/city.png";
let beachImage = new Image();
beachImage.src = "images/beach.png";
window.onload = function ()
{
let canvas = document.getElementById("gameCanvas");
canvas.width = canvas.clientWidth;
canvas.height = canvas.clientHeight;
let ctx = canvas.getContext("2d");
offscreenCanvas = document.createElement('canvas');
offscreenCanvasCtx = offscreenCanvas.getContext('2d');
offscreenCanvas.width = canvas.width;
offscreenCanvas.height = canvas.height;
// draw onto the offscreen canvas
offscreenCanvasCtx.drawImage(beachImage, 0, 0, canvas.width, canvas.height);
// draw an image directly onto the screen's canvas
ctx.drawImage(cityImage, 0, 0, canvas.width, canvas.height);
// draw the offscreen buffer onto the screen's canvas
ctx.drawImage(offscreenCanvas, 0, 0, 200, 200);
};
</script>
</body>
</html>
offscreenCanvas = document.createElement('canvas');
offscreenCanvasCtx = offscreenCanvas.getContext('2d');
offscreenCanvas.width = canvas.width;
offscreenCanvas.height = canvas.height;The code above creates an offscreen canvas and a graphics context up the offscreen canvas. It does not have to be the same size as the HTML canvas, but it usually makes sense to match the size.
// draw onto the offscreen canvas
offscreenCanvasCtx.drawImage(beachImage, 0, 0, CANVAS_WIDTH, CANVAS_HEIGHT);Drawing on an offscreen canvas is done in exactly the same way as for a HTML canvas.
// draw the offscreen buffer onto the screen's canvas
ctx.drawImage(offscreenCanvas, 0, 0, 200, 200);Any canvas can be drawn onto another canvas using the drawImage() funciton. In this example, the offscreen canvas is drawn onto the HTML canvas.