Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

18.04.2009, 13:04

Frage zu Vertex und Index Buffer

Ich habe gerade im Buch von Scherfgen das Kapitel mit Vertex und Indexbuffer durchgearbeitet.
Es funktioniert alles einbandfrei, aber mir ist bisher aufgefallen, das man eigentlich jede Schnittstelle wieder freigeben muss, ich könnte mir vorstellen, dass man das mit diesen Buffern auch machen muss.
Habe aber im Buch darüber nichts gefunden.
Als Beispiel jetzt möchte ich ein Spiel programmieren, in welchem es mehrere Level gibt und ich muss dafür für jedes Element neuen Vertex b.z.w. IndexBuffer anlegen, dann ist doch der Speicher in der Grafikkarte irgendwann voll.

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

2

18.04.2009, 13:15

Jop, alle COM Objekte müssen per Release freigegeben werden. Ich würde da raten einen kleinen Wrapper für solche Objekte zu schreiben, der dir das ganze dann mit RAII immer schön verwaltet, dann musst du dir da nicht ständig sorgen machen..

3

18.04.2009, 13:24

Danke, kleine Frage noch.

Kann es sein, dass du mit Wrapper einen Speichermanager meinst ?
Und was ist RAII ?

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

4

18.04.2009, 13:35

Im weitesten Sinne.. ;)
RAII ist eine Technik, um solche Probleme zu umgehen, dass vergessen geht, dass man noch eine Ressource schliessen muss. (siehe Wikipedia Artikel)

Es geht darum, dass, wenn du ein automatisches Objekt erstellst (also kein new, oder malloc), dass das automatisch zerstört wird, sobald der Scope (Sichtbarkeitsraum der Variable) verlassen wird und der Destruktor aufgerufen wird. Somit kannst du im Destruktor die Ressource wieder freigeben, ohne das jedes mal dran denken zu müssen. (Also Release aufrufen).

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class myVertexBuffer
{
   public:
       myVertexBuffer (...)
       {
           device->CreateVertexBuffer (...);
       }

       ~myVertexBuffer (...)
       {
           vb->Release ();
       }
   private:
       PDIRECT3DVERTEXBUFFER9 vb;
}; 

....

{
myVertexBuffer mvb (...);
} //mvb wird automatisch zerstört und im Destruktor das Objekt freigegeben


Das kann man natürlich noch viel generischer gestalten, aber das überlasse ich mal dir. ;)
Aber der Vorteil sollte klar sein. Wenn du da jetzt ein myVertexBuffer Objekt benutzt, dann musst du dich nicht um die Freigabe kümmern, respektive nicht immer dran denken release aufzurufen. (Zusätzlich lässt sich das ganze auch sehr schön mit AddRef zusammen benutzen).

5

18.04.2009, 13:52

Danke dir für den Typ und deine Hilfe.

Danke dir für den Typ und deine Hilfe.

Werbeanzeige