Webgl 上下文丢失且未恢复

Raz*_*a O 5 javascript memory webgl

我的 webgl 上下文丢失/恢复有问题。

我的应用程序非常繁重,包含大量信息、图表、列表……和地图。

在地图中,我使用 webGL 以获得最佳性能。我的代码正在处理丢失并正确恢复的上下文。

我正在开始一个大操作,导致从服务器加载数据,解析它,...这有时会使浏览器失去我的 webgl 上下文。问题是上下文永远不会恢复。当我再次进行这个大操作时,我得到了恢复事件。

在我看来,这与内存和垃圾收集器的释放时间有关。

但我真的不知道该怎么做,以及如何解决这个问题。

小智 5

处理丢失的方法可能是重新创建画布并重新初始化 GL 部分的应用程序。最后,所有资源都消失了,因此重新创建上下文所增加的开销应该不会太麻烦,并且您可以在事件webglcontextlost到达时立即采取行动。

(但不确定这是否是最好的主意......)

评论拉齐扎关于以下问题的答案WEBGL_lose_context

不要像您在那里建议的那样使用这个。此扩展只是一个调试工具,只能用于模拟此行为。

另请参见此处:https ://www.khronos.org/registry/webgl/extensions/WEBGL_lose_context/


Raz*_*a O 0

找到了手动调用恢复上下文的方法。不知道这样做是否好/聪明,但它对我有用。

我们通过使用扩展名来做到这一点WEBGL_lose_contextMDN 参考

// Loading the extension
var ext = gl.getExtension("WEBGL_lose_context"); 

...
// This code in the context lost event, wait 3 secs for forcing 
// restore context
var restoreTimeout = setTimeout(function() { 
     ext.restoreContext(); 
}, 3000);

...
// This code in restore context event
// incase we got restore not from my timeout, i'm canceling it
restoreTimeout && clearTimeout(restoreTimeout);
Run Code Online (Sandbox Code Playgroud)