0

我们有一个相当广泛的 three.js 应用程序,使用了很多材质、场景、渲染缓冲区等。我们只能刷新/重新启动它几次,它会因几个问题之一而失败;所有这些都相当于耗尽了 WebGL 资源。

我在 window.onbeforeunload 上添加了一个清理例程,它在支持它的对象上调用 dispose() 方法;材质、渲染缓冲区和几何图形。我不相信我已经抓住了所有资源;但这似乎已经足够了,因为我已经能够每五秒刷新半个小时。

问题是:[1]触发此类清理的最佳方式是什么?window.onbeforeunload 似乎很有效,但也许有理由选择一些替代方案?

[2]执行此类清理的最佳方法是什么?在清理所有 WebGL 资源的渲染器上进行处置会很好。(我不关心 javascript 对象,因为浏览器似乎很有能力清理这些对象。)

我在这里看到了相关的问题;例如关于清理场景,但我对完整的清理感兴趣。我猜 WebGL 较低级别的任何答案都适用于这种全局清理;它可能不仅仅适用于一些 three.js 资源,因为它无法计算出这些较小清理的范围。

4

2 回答 2

1

这是 chrome 28 中的一个已知问题,已在下一版本中修复。您可以下载测试版并亲自查看。

于 2013-08-01T22:27:40.710 回答
1

通常,当一个网页被卸载时,执行任何类型的清理都不是该页面的责任;它的资源被一次性全部丢弃。否则,草率或恶意页面会经常造成麻烦。WebGL 也不例外。

您应该将您看到的行为视为浏览器错误,找出一个简单的测试页面来演示该问题,并将其报告给浏览器供应商。从长远来看,这将为每个人解决问题并减轻您的维护负担。

于 2013-07-31T22:48:10.467 回答