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/
找到了手动调用恢复上下文的方法。不知道这样做是否好/聪明,但它对我有用。
我们通过使用扩展名来做到这一点WEBGL_lose_context。
MDN 参考
// 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)
| 归档时间: |
|
| 查看次数: |
5364 次 |
| 最近记录: |