2012-12-31 7 views
5

mam Mesh instancji, który wykorzystuje TubeGeometry za to ścieżka. Kiedy wprowadzam zmiany w krzywej podstawowej, na której opiera się instancja TubeFeometry, usuwam siatkę ze sceny, a następnie tworzę nową.pamięci dealokacji z dynamicznie dodawane oczka nie Praca

Scena aktualizuje się prawidłowo, ale pamięć eksploduje, co oznacza, że ​​nie usuwam poprawnie usuniętej siatki, gdy nie będzie ona dostępna.

Oto kod próbuję użyć do deallocate:

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

gdzie parent jest Object3D że umieść Mesh w, i renderer jest instancją WebGLRenderer.

Czy ktoś może mi powiedzieć, co robię źle i jak to zrobić poprawnie?

Here's a Plunk with my currently example. Odpowiedni kod znajduje się w pliku scene.js , linie 76-86. Weź pod uwagę, że w przykładzie użyto r53.

Odpowiedz

4

Nie deallocate Zastosowana geometria

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

'deallocateGeometry' nie jest to metoda w ** ** R53 (wersja w moim przykładzie), a także w nowo wydany ** ** R54 wszystko metody 'WebGLRenderer.deallocate *' są prywatne. Niemniej jednak +1 za wskazanie braku deallokacji geometrii, co wydaje się być problemem. – merv

+1

Mam nadzieję, że r54 sprawi, że rzeczy będą prostsze. Po prostu wywołaj 'geometry.dispose()' /'texture.dispose() '/ 'material.dispose()' ... – mrdoob