我遇到了关于webgl上下文丢失/恢复的问题。
我的应用程序非常重,包含大量信息、图表、列表和地图。
在地图中,我使用webGL以获得最佳性能。我的代码可以正确处理上下文丢失和恢复。
我开始一个耗时的操作,导致从服务器加载数据、解析数据等。这有时会导致浏览器丢失我的webgl上下文。问题是上下文永远无法恢复。当我再次执行此大型操作时,我才能获得恢复事件。
在我看来,这与内存和垃圾回收释放时间有关。
但我真的不知道该怎么做,如何解决这个问题。
我的应用程序非常重,包含大量信息、图表、列表和地图。
在地图中,我使用webGL以获得最佳性能。我的代码可以正确处理上下文丢失和恢复。
我开始一个耗时的操作,导致从服务器加载数据、解析数据等。这有时会导致浏览器丢失我的webgl上下文。问题是上下文永远无法恢复。当我再次执行此大型操作时,我才能获得恢复事件。
在我看来,这与内存和垃圾回收释放时间有关。
但我真的不知道该怎么做,如何解决这个问题。
.restoreContext()
只有在通过手动使用.loseContext()
丢失上下文时才起作用,否则(在自然情况下)它不会做任何事情。它专门用于模拟上下文的丢失。来自文档:如果上下文不是通过loseContext()
丢失的,则生成INVALID_OPERATION
错误。 - Jarubaevent.preventDefault()
即可轻松解决。但是它不起作用。除非您在此之前手动调用.loseContext()
,否则.restoreContext()
将完全无效。 - JarubaNode.cloneNode()
来克隆画布以请求新的WebGL上下文,但这也没有起作用。我坚信这是Chrome的一个bug,目前绝对无法恢复上下文。我已经尝试了一个月内能想到的所有方法,但仍未找到任何解决方案。向DOM添加按钮是不可接受的,因为我们正在为NW.js/Electron开发视频播放器,该播放器与VLC二进制文件绑定,并将视频帧绘制到画布中,失去WebGL上下文会停止视频传输。 - Jaruba