2012-12-31 12 views
5

Ho un Mesh esempio che utilizza un TubeGeometry per la sua strada. Quando apporto le modifiche alla curva sottostante a cui è basata l'istanza TubeGeometry, rimuovo la mesh dalla scena e quindi ne creo una nuova.memoria deallocazione di dinamicamente Aggiunto Mesh non funziona

La scena si aggiorna bene, ma la memoria sta esplodendo, il che mi dice che non sto eliminando la mesh rimossa correttamente una volta che è fuori scena.

Ecco il codice che sto cercando di utilizzare deallocare:

$.each(parent.children, function (idx, obj) { 
    parent.remove(obj); 
    renderer.deallocateObject(obj); 
    obj.deallocate(); 
}); 

dove parent è un Object3D che ho posto il Mesh, e renderer è un'istanza di WebGLRenderer.

Qualcuno può dirmi cosa sto facendo male e come farlo correttamente?

Here's a Plunk with my currently example. relativo codice è nelle scene.js di file, le linee 76-86. Prendere nota che l'esempio utilizza r53.

risposta

4

Non rilasciare la geometria utilizzata

$.each(parent.children, function (idx, obj) { 
    parent.remove(obj); 
    renderer.deallocateGeometry(obj.geometry); 
    renderer.deallocateObject(obj); 
    obj.geometry.deallocate(); 
    obj.deallocate(); 
}); 
+0

'deallocateGeometry' non è un metodo in ** ** R53 (la versione nel mio esempio), e nel recente rilasciato ** ** r54 tutto i metodi 'WebGLRenderer.deallocate *' sono privati. Tuttavia, +1 per sottolineare la mancanza di deallocazione geometrica, che sembra essere il problema. – merv

+1

Speriamo che r54 renderà le cose più semplici. Basta chiamare 'geometry.dispose()' /'texture.dispose() '/'material.dispose()' ... – mrdoob

Problemi correlati