【发布时间】:2011-11-09 18:17:56
【问题描述】:
假设我有一个 WebGL 画布(通过调用 getContext("experimental-webgl"))。
以后有什么方法可以切换上下文以使用“2d”吗?
这样的目标是在渲染过程中发生错误时显示类似 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);
}
}
【问题讨论】:
-
您能否发布一些实际代码,以便我们了解如何正确回答这个问题,而不仅仅是“是”?
-
大功告成,我试着只保留相关的代码部分。
标签: javascript html dom canvas webgl