8

我有一个使用许多 webgl 上下文的页面,每个画布一个。每次创建新上下文时,画布都可以重新加载、调整大小等。它适用于多次重新加载,但最终当我尝试创建新上下文时,它返回一个空值。我假设我的内存不足。

我希望能够删除不再使用的上下文,以便我可以恢复内存并将其用于我的新上下文。有没有办法做到这一点?还是有更好的方法来处理许多画布?

谢谢。

4

2 回答 2

6

这是 Chrome 和 WebKit 中长期存在的错误

http://code.google.com/p/chromium/issues/detail?id=124238

在 WebGL 中无法“删除”上下文。每当系统处理上下文时,垃圾收集就会删除上下文。届时所有资源都将被释放,但最好是删除自己的资源,而不是等待浏览器删除它们。

正如我所说,这是一个错误。它最终会被修复,但我没有预计到达时间。

我建议不要删除画布。保留它们并重复使用它们。

另一个建议是告诉我们为什么需要 200 幅画布。也许您尝试解决的问题会以不同的方式更好地解决。

于 2013-02-21T01:16:07.033 回答
4

我会假设,在您释放附加到您的上下文的所有资源之前,某些东西仍然会保留对它的引用,因此它仍然存在。

有几件事要尝试:

  • 这是一些调试 gl 代码。那里有一个函数可以将上下文重置为其初始状态。在删除它所属的画布之前尝试一下。

  • 某些事件系统可能会引用您的上下文,从而使它们处于僵尸状态。

  • 您是否要从 DOM 中删除画布?我确信页面在一个实例中可以维护的资源是有限的。

SO 抱怨我们的评论线程有点长。先试试这些东西,如果有帮助,请告诉我。

于 2013-02-20T02:42:32.550 回答