Autor Beitrag
ScaVo
Hält's aus hier
Beiträge: 14



BeitragVerfasst: Sa 19.11.11 23:55 
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
ausblenden 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
j.klugmann
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19274
Erhaltene Danke: 1740

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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.