A canvas element can have a rendering context bound to it. Initially, it does not have a bound rendering context.
To keep track of whether it has a rendering context or not, and what kind of rendering context it is, a canvas also has a canvas context mode, which is initially none but can be changed to either direct-2d, direct-webgl, indirect, or proxied [7].