删除WebGL上下文

时间:2013-02-20 00:26:04

标签: memory-management canvas webgl

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

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

感谢。

2 个答案:

答案 0 :(得分:5)

这是Chrome和WebKit中的长期错误

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

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

正如我所说,这是一个错误。它最终会被修复,但我没有ETA。

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

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

答案 1 :(得分:2)

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

要尝试的一些事项:

  • Here is some debug gl code.有一个函数可以将上下文重置为初始状态。在删除它所属的画布之前尝试一下。

  • 可能某些事件系统可以保留对您的上下文的引用,使它们处于僵尸状态。

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

SO抱怨我们的评论帖子有点长。首先尝试这些事情,如果有帮助请告诉我。