假设我有一个 WebGL 画布(通过调用getContext("experimental-webgl")
).
有没有办法稍后切换上下文以使用"2d"
one ?
这样做的目的是在渲染过程中发生错误时显示类似调试 BSOD 的信息。
如果不可能,那么:
- 我可以在画布上嵌入一个 html 元素,并强制该元素与画布完全相同(即使最后一个元素已调整大小)吗?
- 我可以替换 dom 节点,并更新有关旧节点的每个引用以反映更改吗?
[edit]这是我当前的最小调用代码。 Canvas 是一个 DOM 节点,包含由 WebGL API 填充的画布,而回调是处理单个帧的函数。
function failure(cvs, e) {
var ctx = cvs.getContext('2d'); // Fail here, returns `null' if cvs.getContext('webgl') has been called
ctx.fillStyle = 'rgb(0, 0, 0)';
ctx.fillRect(0, 0, cvs.width, cvs.height);
ctx.fillStyle = 'rgb(255, 255, 255)';
ctx.font = 'bold 12px sans-serif';
ctx.fillText(e.toString(), 0, 0);
}
function foobar(canvas, callback) {
try {
callback();
} catch (e) {
failure(canvas, e);
throw e;
} finally {
requestAnimationFrame(arguments.callee);
}
}