如何解决webgl context数量限制问题?

因为浏览器对webgl context数量的限制,导致3d可视化插件超过16个之后(同一浏览器窗口,不同浏览器页签),前面创建的可视化组件就会丢失webgl context,这个问题要如何解决。
我目前使用的解决方案是切换页签之后就让切换前的页签的可视化组件释放web context,切换到的页签再重新创建webgl context,但是这样会导致可视化组件出现卡顿(会有一个重新加载的过程),而且3d组件的相机角度也会被重置。
出现问题的页面效果如下:


使用的两个可视化组件分别是:

  • ngl: 用来展示3D分子结构
  • plotly: 用来展示3D图表

使用的前端框架是vue
目前使用的解决方法的代码:

  mounted() {
    document.addEventListener("visibilitychange", e=>{
      //隐藏标签
      if(document.visibilityState === "hidden"){
        if (!this.plotlyClosed) {
          plotly.purge(this.divId)
          this.plotlyClosed = true
        }
      }
      //切换显示标签
      if(document.visibilityState === "visible"){
        if (this.data.length !== 0) {
          if (!this.plotlyClosed) {
            plotly.purge(this.divId)
          }
          if (this.dimension == 3) {
            this.drawPlot3D(this.data, this.divId)
          } else {
            this.drawPlot2D(this.data, this.divId)
          }
        }
      }
    })
  },
阅读 1.2k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏