Каков правильный способ удаления сцены из сетки? В этом примере:
removable_items = [];
box = new THREE.Object3D();
scene.add(box);
function add() {
var mesh = new THREE.Mesh( new THREE.IcosahedronGeometry( 10, 5 ), new THREE.MeshPhongMaterial( {color: 0xFFFFFF}) );
box.add( mesh );
removable_items.push(mesh);
//clean(); ///// when is integrated in function memory is cleaned properly
}
function clean() {
if( removable_items.length > 0 ) {
removable_items.forEach(function(v,i) {
v.parent.remove(v);
});
removable_items = null;
removable_items = [];
}
}
function makeExperiment(r) {
var i = 0;
while (i < r) {
add();
i++;
if( r === i ) console.log(r+' finnished ');
}
}
makeExperiment(50);
///после этого я mannualy set clean();
сетки больше не видны на сцене, как и ожидалось, но с использованием памяти, которая через некоторое время заканчивается утечкой памяти и сбоем браузера.
Где проблема, сделал ли THREE.js некоторые другие ссылки?
THREE.js R73
EDIT: когда функция clean();
интегрирована в функцию (прокомментировано сейчас в коде), память очищается должным образом. Но когда я устанавливал clean();
вручную после завершения makeExperiment();
, память не устанавливается как свободная.