Mozilla Developer Netowrk (MDN) 文档这样说:
getContext(in DOMString contextId) RenderingContext 返回画布上的绘图上下文,如果不支持上下文 ID,则返回 null。绘图上下文可让您在画布上绘图。使用“2d”调用 getContext 会返回一个 CanvasRenderingContext2D 对象,而使用“experimental-webgl”(或“webgl”)调用它strong>") 返回一个 WebGLRenderingContext 对象。此上下文仅在实现 WebGL 的浏览器上可用。
结果:
| Context | Chrome (webkit) | Firefox (gekko) |
| ------------------ | ------------------------ | ------------------------ |
| 2d | CanvasRenderingContext2D | CanvasRenderingContext2D |
| 3d | null | null |
| webgl | WebGLRenderingContext | WebGLRenderingContext |
| experimental-webgl | WebGLRenderingContext | null |
我建议阅读webgl wiki:http://www.khronos.org/webgl/wiki/FAQ
这是完整的What is the recommended way to initialize WebGL? 部分:
(虽然我建议你直接从wiki 阅读它,以防它发生变化!)
推荐的初始化 WebGL 的方法是什么?
建议您检查初始化成功或失败。如果 WebGL 初始化失败,建议您区分失败是因为浏览器不支持 WebGL,还是因为其他原因失败。如果浏览器不支持 WebGL,则向用户显示指向“http://get.webgl.org”的链接。如果 WebGL 因其他原因失败,则向用户提供指向“http://get.webgl.org/troubleshooting/”的链接
您可以通过检查 WebGLRenderingContext 的存在来确定浏览器是否支持 WebGL。
if (window.WebGLRenderingContext) {
// browser supports WebGL
}
如果浏览器支持 WebGL 并且 canvas.getContext("webgl") 返回 null 则 WebGL 由于用户浏览器以外的其他原因(没有 GPU、内存不足等)而失败
if (!window.WebGLRenderingContext) {
// the browser doesn't even know what WebGL is
window.location = "http://get.webgl.org";
} else {
var canvas = document.getElementById("myCanvas");
var ctx = canvas.getContext("webgl");
if (!ctx) {
// browser supports WebGL but initialization failed.
window.location = "http://get.webgl.org/troubleshooting";
}
}
注意:您必须检查浏览器是否支持 WebGL,才能知道从 canvas.getContext() 获取 null 意味着
There is a wrapper that will do all of this for you here.
使用包装器的示例
<html>
<body>
<script type="text/javascript" src="localpath/webgl-utils.js"></script>
<script>
function init() {
canvas = document.getElementById("c");
gl = WebGLUtils.setupWebGL(canvas);
if (!gl) {
return;
}
...
}
window.onload = init;
</script>
<canvas id="c"></canvas>
</body>
</html>