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.

2 Comments

  1. 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.

  2. Netrix:

    Dzięki

Leave a comment