Javascript 热交换3d框架

Javascript 热交换3d框架,javascript,webgl,8thwall-xr,8thwall-web,Javascript,Webgl,8thwall Xr,8thwall Web,我正在进行的AR项目要求我在.hcap体积视频场景和交互式游戏场景之间来回转换几次。我正在使用第8面墙/three.js(HoloVideoObject)作为.hcap场景,并希望使用Playcanvas作为游戏场景。我需要在同一网页上交换场景的原因是,客户端不希望用户多次请求相机许可。在将html/js注入主体以交换场景之前,我首先调用此清理函数: const cleanUpScene = (scene) => { switch(scene) { case SceneType

我正在进行的AR项目要求我在.hcap体积视频场景和交互式游戏场景之间来回转换几次。我正在使用第8面墙/three.js(HoloVideoObject)作为.hcap场景,并希望使用Playcanvas作为游戏场景。我需要在同一网页上交换场景的原因是,客户端不希望用户多次请求相机许可。在将html/js注入主体以交换场景之前,我首先调用此清理函数:

const cleanUpScene = (scene) => {
  switch(scene) {
    case SceneType.HCAP:
      XR8.stop()
      const {scene, camera, renderer} = XR8.Threejs.xrScene()
      renderer.xr.dispose()
      renderer.dispose()
      XR8.clearCameraPipelineModules()

      $('#camerafeed').remove()
      break

    case SceneType.Game:
      XR8.PlayCanvas.stopXr()
      pc.app.destroy()
      XR8.clearCameraPipelineModules()

      $('#application-canvas').remove()
      $('#camerafeed').remove()
      break

    default:
      break;
  }
}
我能够成功地交换场景,但在多次交换后,我会收到以下错误消息:

> There are too many active WebGL contexts on this page, the oldest context will be lost.
...
> TypeError: null is not an object (evaluating 'A.TEXTURE_2D')
第二个错误发生在第一个错误发生的几个实例之后。我看到一些帖子建议在WebGLRenderingContext上调用loseContext()。我试着补充说:

const cleanUpScene = (scene) => {
  switch(scene) {
    case SceneType.HCAP:
      ...
      renderer.xr.dispose()
      renderer.getContext().getExtension('WEBGL_lose_context').loseContext()
      renderer.dispose()
      ...
      break

    case SceneType.Game:
      ...
      XR8.PlayCanvas.stopXr()
      pc.app.graphicsDevice.gl.getExtension('WEBGL_lose_context').loseContext()
      pc.app.destroy()
      ...
      break

    default:
      break;
  }
}
在几次交换之后,添加该选项将导致在上面列出的两个选项之间出现新的错误消息:

> WebGL: INVALID_OPERATION: loseContext: context already lost
我的猜测是,尽管canvas元素已被销毁,但仍有一些东西保留了对WebGLRenderingContext的引用


有没有人对正在发生的事情以及如何解决这一问题有任何想法?感谢您阅读所有这些内容,并提前感谢您的建议。

不幸的是,唯一适用于我的用例的解决方案是完全破坏web gl上下文和相关3d框架的应用程序实例。上述“上下文已丢失”错误已在第八墙版本v16.1.4.1227中修补。

为什么不使用两张画布?构建和销毁webgl上下文和所有相关缓冲区非常昂贵,而且通常是不必要的。