Wpis z mikrobloga

oho, to mi sie trafił kolejny bug z dupy w Three.js - zaczyna mnie wkurzać to coraz częstrze omijanie błędów/braków tej libki, więcej się jej nie tykam, jeśli będę musiał znowu coś budować na niej od zera.. ()

Nie wiem, czy to jakaś moda w JSie, czy twórcy libki sobie mnie trollują, ale o zarządzaniu pamięcią to chyba nie słyszeli - są metody dispose() ale tylko na obiektach, które mają coś do czynienia z GPU. każdy inny obiekt może, ale nie musi być czyszczony, więc wycieki pamięci są bardzo prawdopodobne i jeśli samemu ręcznie się nie wyczyści propertiesów obiektu, uprzednio dispose`ując co się da, to będzie to dziadostwo w tej pamięci tkwić po wsze czasy O.o
a mogli po prostu dodać dispose() do każdego obiektu w libce i zamiast ręcznie czyścić wszystko, wołałbym tylko jedną metodę. szlag by to trafił ( ͡° ʖ̯ ͡°)


#ihatejavascript #javascript #gamedev
  • 6
@chudzielec: tak i nie ( ͡° ͜ʖ ͡°) ale widze do czego zmierzasz i odpowiem o co mi chodzi: obiekt poza sceną ma referencje w kontrolce UI (wiadomo - jakoś trzeba sterować obiektem) i gdyby każdy obiekt miał finalizator (destroy/dispose) to wołając go skądkolwiek, wyczyściłby propertiesy tego obiektu, odpiął od sceny i wysłał event w którym odpiąłbym referencje na niego w kontrolce - wszystko z automatu, za
@PsichiX: Wydaje mi się, że mechanizm który proponujesz byłby dobry, ale jeśli THREE.js miało by inne API. Widzę, że jest metoda add() dla sceny, to jako programista spodziewam się też widzieć tam remove(). Wykonanie dispose() na obiekcie, który nie został usunięty ze sceny na logikę powinien spowodować błąd albo chociaż warning. Nie wiem jak to jest w THREE.js, ale jeśli w taki sposób to jest to zaprojektowane jak najbardziej poprawnie.

Jeśli
@PsichiX: Trochę nie rozumiem co masz na myśli mówiąc że, nie dba o pamięć. Jawny dispose powinien być właśnie tylko w obiektach dobierających się do zasobów (gpu, audio, obrazki) i w obiektach zapisujących się na eventy. Nie wiem jak jest z pozostałą częścią w 3js ale nie chciałbym w js kolejnego c# podobnego tworu.