Closed argorus closed 5 years ago
How are you updating the geometry passed to setGeometry? Can i see the relevant piece of code?
for(var i = 0; i < 2; i++)
{
var circlesGeometry = new THREE.Geometry();
if( i == 0)
{
for(var j = 0; j < (cLength*(bSum*20 + 4))/360; j += cLength/360)
{
var v = new THREE.Vector3();
v.set( 300*Math.cos(j), 300*Math.sin(j), 0);
circlesGeometry.vertices.push(v);
}
}
else
{
for(var j = cLength/2; j < ((cLength*(bSum*20 + 4))/360 + cLength/2); j += cLength/360)
{
var v = new THREE.Vector3();
v.set( 300*Math.cos(j), 300*Math.sin(j), 0);
circlesGeometry.vertices.push(v);
}
}
var mesh = scene.getObjectByName("circleX" + i);
var curve_line = new MeshLine();
curve_line.setGeometry(circlesGeometry);
var new_mesh = new THREE.Mesh(curve_line.geometry, mesh.material);
scene.remove(mesh);
new_mesh.name = "circleX" + i;
scene.add(new_mesh);
new_mesh.position.z = -1900;
}
It's a part of function "draw" which called using 'requestAnimationFrame'.
scene.remove basically removes a child from its parent, but doesn't dispose of it.
THREE.MeshLine keeps its own internal THREE.BufferGeometry and resizes it accordingly. I think in your case you're not disposing of the original THREE.Geometry. Try calling .dispose() on circlesGeometry after .setGeometry and see if it helps with the leak.
Unfortunately, it doesn't work.
I have the same problem
I'm seeing a memory leak too. I'm spawning around 10 animated lines per second, and removing the lines when no longer required. The memory heap keeps growing and eventually crashes the app.
You need to do all three geometry.dispose()
, material.dispose()
and scene.remove
and there's no (at least from what I can notice) memory leak.
It helped to me using "mesh.material.dispose()" and "mesh.geometry.dispose()" in all places where i remove objects from scene. Now I haven't any memory leaks in my project. Thanks!
It happens when I use function setGeometry in a real time (inside a redrawing function of my project). Can you fix it or explain other ways to update geometry of lines?