我遇到了webgl上下文丢失/恢复的问题。
我的应用程序非常繁重,有大量的信息,图表,列表,......和地图。
在地图中我使用webGL以获得最佳性能。我的代码正在处理丢失和正确恢复的上下文。
我开始一项大型操作,导致从服务器加载数据,解析它,...这有时会使浏览器失去我的webgl上下文。问题是上下文永远不会恢复。当我再次做这个大操作时,我得到了恢复事件。
在我看来,它与内存和垃圾收集器释放时间有关。
但我真的不知道该怎么做,以及如何解决这个问题。
答案 0 :(得分:2)
找到一种手动调用恢复上下文的方法。不知道这样做是否好/聪明,但它对我有用。
我们使用扩展程序WEBGL_lose_context
来完成。
MDN reference
// 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);
答案 1 :(得分:-2)
处理丢失的方法可能是重新创建画布并重新初始化GL部件的应用程序。最后,所有资源都消失了,因此上下文重新创建的额外开销不应该太麻烦,您可以在webglcontextlost事件到达时立即采取行动。
(不确定这是不是最好的主意......)
评论Raziza关于WEBGL_lose_context的答案:
不要像你在那里那样使用这个。此扩展仅仅是一个调试工具,只应用于模拟此行为。
(另见:https://www.khronos.org/registry/webgl/extensions/WEBGL_lose_context/)
顺便说一句:支持这一点,所以我得到积分并可能很快就答案发表评论;)