У нас есть довольно обширное приложение three.js, использующее довольно много материалов, сцен, буферов рендеринга и т. Д. Мы могли обновлять / перезапускать его только пару раз, и оно не получалось по одной из нескольких проблем; все это привело к исчерпанию ресурсов WebGL.
Я добавил процедуру очистки в window.onbeforeunload, которая вызывает методы dispose () для объектов, которые ее поддерживают; материалы, рендербуферы и геометрии. Я не уверен, что уловил все ресурсы; но, похоже, этого было достаточно, так как я мог обновляться каждые пять секунд в течение получаса.
Вот вопросы: [1] Как лучше всего запустить такую очистку? window.onbeforeunload кажется довольно эффективным, но, может быть, есть причина выбрать какую-то альтернативу?
[2] Как лучше всего выполнить такую очистку? Было бы хорошо иметь утилиту для рендерера, очищающую все ресурсы WebGL. (Меня не беспокоят объекты javascript, поскольку браузер, похоже, вполне способен их очистить.)
Я видел здесь связанные вопросы; например, об очистке сцен, но меня интересует полная очистка. Я полагаю, что любой ответ на нижнем уровне WebGL также подойдет для этой глобальной очистки; что могло бы быть не только для каких-то ресурсов three.js, поскольку он не смог бы проработать объем этих небольших чисток.