我有一个包含大量Mesh和MorphAnimMesh的大场景。我想在删除网格时释放内存。如果我知道这是最好的方法:
for ( var i = scene.children.length - 1; i >= 0 ; i -- ) {
var obj = scene.children[i];
scene.remove(obj);
obj.deallocate();
obj.geometry.deallocate();
obj.material.deallocate();
obj.material.map.deallocate();
}
如果我在此之后检查任务管理器的内存使用情况,则没有任何变化。 (尝试等待几分钟没有GC。)谷歌Chrome内存快照显示仍然存在的对象。 THREE.Geometry @ 1862203等中的morphTargets
尝试将obj设置为null,但仍然没有内存减少。
知道我做错了什么?
它是一款具有等级的游戏,玩家可以从一个变换到另一个。经过几次更改后,内存使用量增加到很高。这就是为什么我想在级别更改之前从内存中删除所有对象。
答案 0 :(得分:10)
最有可能的是,您需要添加以下部分或全部内容:
geometry.dispose();
material.dispose();
texture.dispose();
查看以下示例:
http://mrdoob.github.com/three.js/examples/webgl_test_memory.html
http://mrdoob.github.com/three.js/examples/webgl_test_memory2.html
three.js r.60
答案 1 :(得分:-1)
我确实尝试了所有的dispose和deallocate方法,但没有任何效果。
然后,我为使用webgl渲染器渲染360图像的离子应用程序执行了以下操作。
this.renderer = new THREE.WebGLRenderer({ antialias: true });
RicohView.prototype.stopRendering = function () {
this.canRender = false;
this.renderer.forceContextLoss();
this.renderer.dispose();
console.log('renderer disposed');
cancelAnimationFrame(this.requestId);
}
requestId可以从
中捕获this.requestId = requestAnimationFrame(render);