我们有一个相当广泛的 three.js 应用程序,使用了很多材质、场景、渲染缓冲区等。我们只能刷新/重新启动它几次,它会因几个问题之一而失败;所有这些都相当于耗尽了 WebGL 资源。
我在 window.onbeforeunload 上添加了一个清理例程,它在支持它的对象上调用 dispose() 方法;材质、渲染缓冲区和几何图形。我不相信我已经抓住了所有资源;但这似乎已经足够了,因为我已经能够每五秒刷新半个小时。
问题是:[1]触发此类清理的最佳方式是什么?window.onbeforeunload 似乎很有效,但也许有理由选择一些替代方案?
[2]执行此类清理的最佳方法是什么?在清理所有 WebGL 资源的渲染器上进行处置会很好。(我不关心 javascript 对象,因为浏览器似乎很有能力清理这些对象。)
我在这里看到了相关的问题;例如关于清理场景,但我对完整的清理感兴趣。我猜 WebGL 较低级别的任何答案都适用于这种全局清理;它可能不仅仅适用于一些 three.js 资源,因为它无法计算出这些较小清理的范围。