Memory management 删除WebGL上下文

Memory management 删除WebGL上下文,memory-management,canvas,webgl,Memory Management,Canvas,Webgl,我有一个页面使用了许多webgl上下文,每个画布一个。每次创建新上下文时,画布都可以重新加载、调整大小等。它可以多次重新加载,但最终当我尝试创建一个新上下文时,它会返回一个空值。我想我的内存快用完了 我希望能够删除我不再使用的上下文,这样我就可以恢复内存并将其用于我的新上下文。有没有办法做到这一点?还是有更好的方法来处理许多画布 谢谢。我假设,在您释放所有附加到上下文的资源之前,某些内容仍然会包含对它的引用,因此它仍然存在 有几件事可以尝试: 有一个函数可以将上下文重置为其初始状态。请在删除它

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

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

谢谢。

我假设,在您释放所有附加到上下文的资源之前,某些内容仍然会包含对它的引用,因此它仍然存在

有几件事可以尝试:

  • 有一个函数可以将上下文重置为其初始状态。请在删除它所属的画布之前尝试此操作

  • 某些事件系统可能持有对上下文的引用,使它们处于僵化状态

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


所以我抱怨我们的评论帖子有点长。请先试试这些东西,如果有帮助请告诉我。

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

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

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

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


另一个建议是告诉我们你为什么需要200张画布。可能您试图解决的问题最好用另一种方法解决。

getContext()调用返回null,因此在我尝试设置视口时失败,因为对象为null。在调用
getContext()后执行任何其他操作之前,您应该先检查上下文是否有效
创建第200个上下文时失败。前199个是美丽而美妙的。代码非常简单。请尝试{gl=canvas.getContext(“实验性webgl”);gl.viewportWidth=300;gl.viewportHeight=150;}catch(e){}if(!gl){alert(“无法初始化webgl,抱歉:-(”);}200个上下文?同时?调试代码有帮助。跟踪上下文并偶尔使用WebGLDebugUtils清理所有上下文会更好。重置为初始状态(gl);,然后删除画布,然后删除上下文。该链接已断开,但代码也托管在