Trochę więcej o Mesh
Ostatnio wymyśliłem dość prosty TextureManager (Resource był w planie, ale nie wiem wszystkiego o zasobach DX, które trzeba zwalniać, a o teksturach wiem wystarczająco). Właściwie to nazwanie go jest lekką przesadą, ponieważ składa się on ze struktury, vector’a i 2 funkcji. Vector zawiera obiekty struktury, która składa się ze adresu tekstury, licznika użyć oraz wskaźnika na interfejs tekstury. Vector’em zarządzają 2 funkcje:
LoadTexture
DeleteTexture
Pierwsza sprawdza czy nie ma już załadowanej takiej tekstury jeżeli jest to zwiększa jej licznik i zwraca interfejs. W przeciwnym przypadku tworzy i dodaje do vector’a
Druga sprawdza po wskaźniku czy jest, jeżeli tak to dekrementuje po czym sprawdza licznik, jeżeli spadł do 0 to zwalnia teksturę, kasuje z vector’a.
Składniki zawierają się w sekcji prywatnej klasy Mesh, przy czym vector jest statyczny, dzięki czemu dostępny dla wszystkich potomków klasy abstrakcyjnej Mesh.
Reg:
Nie wiesz wszystkiego o zasobach DX, które trzeba zwalaniać? To słuchaj:
– Zasoby Direct3D – tekstury, powierzchnie (Surface) bufory wierzchołków i indeksów zwalniasz zależnie od puli pamięci, do której je dałeś:
> D3DPOOL_DEFAULT – trzeba usunąć przy utracie urządzenia i ponownie utworzyć po zresetowaniu
> każda inna – trzeba usunąć przed usunięciem urządzenia Direct3D
– Zasoby D3DX, np. ID3DXFont, ID3DXLine, ID3DXSprite: Po utracie urządzenia trzeba wywołać metodę OnLostDevice, po zresetowaniu OnResetDevice, a zwolnić trzeba przed zwolnieniem urządzenia Direct3D.
– IDirect3DQuery9 i IDirect3DVertexDeclaration9, przyznaję się bez bicia, nie wiem. Dokumentacja nie mówi jasno kiedy to zwalniać, a przynajmniej ja nie znalazłem.
3 December 2007, 2:48 pmNetrix:
Dzięki
5 December 2007, 3:39 pm