9

我想在 Three.js 中处理丢失的上下文事件。这里有一个很好的文档,但不幸的是,当我将它应用到我的renderer.domElement. 我尝试通过单击来丢失上下文,并且其中的一些变量loseContext()未定义。

我猜 Three.js 的结构不同。有专家吗?

4

1 回答 1

10

您应该能够对渲染器进行初始化,并且当然假设您存储渲染器的变量名为“渲染器”。

renderer.context.canvas.addEventListener("webglcontextlost", function(event) {
    event.preventDefault();
    // animationID would have been set by your call to requestAnimationFrame
    cancelAnimationFrame(animationID); 
}, false);

renderer.context.canvas.addEventListener("webglcontextrestored", function(event) {
   // Do something 
}, false);

顺便说一句-looseContext 不是由 Three.JS 定义的,而且它不是此时的标准方法。您可以通过执行以下操作来模拟它。

在 Three.JS 之前加载这个脚本

https://github.com/vorg/webgl-debug

然后,在您启动渲染器后,您可以将 lostContext 挂接到画布上。

renderer.context.canvas = WebGLDebugUtils.makeLostContextSimulatingCanvas(renderer.context.canvas);

要触发 lostContext 你会这样做。

renderer.context.canvas.loseContext();

然后你也可以通过这样做在一定数量的调用后让它失败。

renderer.context.canvas.loseContextInNCalls(5);
于 2013-01-28T19:00:38.803 回答