Entwickler-Ecke

Multimedia / Grafik - Wie speichert DirectX Daten?


ScaVo - Sa 19.11.11 23:55
Titel: Wie speichert DirectX Daten?
Sehr geehrtes Forum,
heute geht es mir mal um eine reine Wissenssache. Wenn man über z.B. DirectX ein Interface erstellt, dann kann man dieses auch Locken und wunderbar Daten schreiben ect., aber wie sieht es eigentlich mit dem freigeben dieses Speichers aus? Laut dem Buch welches ich verwende reicht es

Delphi-Quelltext
1:
vertexbuffer := nil;                    

zu schreiben und schon ist alles friedlich.
Nur kommt mir diese Methode unsauber vor. Deswegen wollte ich wissen, ob dann wirklich alles freigegeben ist - inklusive den hinterlegten Vertexdaten? Und wenn ich die Größe des Vertexbuffers ändern möchte, da ich mehr oder weniger Vertices beim nächsten Rendern habe - kann ich dann einfach einen neuen Vertexbuffer mit dem gleichen Interface erstellen oder wie läuft das dann?
Ich hoffe ihr versteht mein Problem und meine Zweifel.
Scavo


Delete - So 20.11.11 11:03

Nein, das hat nichts mit der eigentlichen GPU-Seite von D3D zu tun. Normalerweise gibt's die typischen COM-Aufrufe, um Ressourcen effektiv zu verwalten. DeinObject.Release() sollte zum Beispiel deine Ressource auf der GPU als auch im CPU-RAM(oder wohin du sie auch immer gemappt hast) freigeben. Guck dir mal COM-Schnittstellen an. Ansonsten hat das DirectX-SDK eine sehr gute Dokumentation, die wahrscheinlich nützlicher ist als jedes Buch.

Ich übernehme keine Haftung für die Richtigkeit meiner Aussage. ;)


jaenicke - So 20.11.11 12:24

user profile iconScaVo hat folgendes geschrieben Zum zitierten Posting springen:
Nur kommt mir diese Methode unsauber vor. Deswegen wollte ich wissen, ob dann wirklich alles freigegeben ist - inklusive den hinterlegten Vertexdaten?
Intern wird an dieser Stelle automatisch ein Aufruf von _Release bei dem Interface hinzufügt. Im Übrigen im Normalfall auch ohne, dass du explizit den Wert nil zuweist. Nur weißt du dann evtl. nicht wann das genau geschieht, wenn es nicht gerade eine lokale Variable ist, bei der der Scope die aktuelle Methode ist.

Ob damit auch alles freigegeben wird, sollte die Dokumentation beinhalten. Zumindest dann, wenn es nicht so ist.