Test Num WebGL Contexts (with GC)

by Gregg Tavares

HTML

<button type="button">add context</button>
<div>num contexts created: <span id="created">0</span></div>
<div>num contexts lost: <span id="lost">0</span></div>
<div>num contexts restored: <span id="restored">0</span></div>
<div>num contexts active: <span id="active">0</span></div>

CSS

body { font-family: monospace; }

JavaScript

const createdElem = document.querySelector('#created');
const lostElem = document.querySelector('#lost');
const restoredElem = document.querySelector('#restored');
const activeElem = document.querySelector('#active');
let numCreated = 0;
let numLost = 0;
let numRestored = 0;
let numActive = 0;

function createCanvas() {
  const canvas = document.createElement('canvas');
  canvas.addEventListener('webglcontextlost', (e) => {
    e.preventDefault();  // allowes context to be restored
    lostElem.textContent = ++numLost;
    activeElem.textContent = --numActive;
  });
  canvas.addEventListener('webglcontextrestored', (e) => {
    lostElem.textContent = --numLost;
    restoredElem.textContent = ++numRestored;
    activeElem.textContent = ++numActive;
  });
  const gl = canvas.getContext('webgl');
  createdElem.textContent = ++numCreated;
  activeElem.textContent = ++numActive;
}

document.querySelector('button').addEventListener('click', createCanvas);