(erledigt) [D3D 11] Zerstört ein Device seine Childs?

Für Fragen zu Grafik APIs wie DirectX und OpenGL sowie Shaderprogrammierung.

(erledigt) [D3D 11] Zerstört ein Device seine Childs?

Beitragvon Krishty » 28.12.2017, 02:22

Hat zufällig jemand Quellen parat, ob das finale ID3D11Device::Release() alle Daten des Devices freigibt (also alle ID3D11DeviceChilds)? Ich habe das mal gelesen, aber nun finde ich es nicht mehr in der MSDN.

Das ist mir wichtig, weil es …
  1. … eine Verletzung der COM-Regeln darstellt (Objekte mit offenen Referenzen dürfen nicht zerstört werden) – allerdings in diesem Fall eine absichtliche
  2. … mir viel Aufräum-Code ersparen könnte.
Zuletzt geändert von Krishty am 01.01.2018, 23:29, insgesamt 1-mal geändert.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Krishty
Establishment
 
Beiträge: 6458
Registriert: 26.02.2009, 12:18
Benutzertext: state is the enemy

Re: [D3D 11] Zerstört ein Device seine Childs?

Beitragvon gdsWizard » 31.12.2017, 15:22

Probiere es doch einfach mal aus. Musst halt einfach vorher schon alle Ressourcen allozieren dann einfach Release fürs Device und dann irgendwas mit den Ressourcen machen.
gdsWizard
Thomas Mittelsdorf
Establishment
 
Beiträge: 227
Registriert: 04.02.2005, 10:12
Wohnort: Meiningen
Benutzertext: www.gamedevstudio.com

Re: [D3D 11] Zerstört ein Device seine Childs?

Beitragvon NytroX » 01.01.2018, 17:48

Also ich mache zwar seit einiger Zeit nichts mehr mit DX, aber das wäre mir neu, dass das automatisch passiert :-)
Sind ja COM Devices, d.h. die haben ja einfach einen "intrusive" Reference Count (über AddRef() und Release()); d.h. die Ressourcen gurken dann im Speicher rum, wenn du sie nicht freigibst.

Ich glaube du kannst dir die Arbeit sowieso nicht sparen, weil du ja auch auf eine "DeviceLostException" bzw. "DeviceNotResetException" reagieren musst; da musst du die Resourcen manuell freigeben und Reset() aufrufen (es sein denn du schmeißt immer das ganze Device weg, aber selbst dann...).
Du kannst das auch prüfen, wenn du dir das Debug interface holst (würde ich sowieso empfehlen). Der zeigt dir dann beim Beenden die nicht freigegebenen Objekte / Refcounts an: Interner Refcount von DX (die sind ok), und Externer Refcount, d.h. die vom User (die sind nicht ok).
(Siehe auch : http://seanmiddleditch.com/direct3d-11-debug-api-tricks/)
NytroX
Establishment
 
Beiträge: 139
Registriert: 03.10.2003, 12:47

Re: [D3D 11] Zerstört ein Device seine Childs?

Beitragvon Krishty » 01.01.2018, 23:27

Ja; ich bin relativ schockiert, wie sehr ich mich in der Sache geirrt habe. Die COM-Regeln werden eingehalten (d.h., die Ressourcen bleiben nach Device-Zerstörung erhalten) und ich habe die dicken Leaks, die man auch erwartet hätte. (Allerdings bewirkt das Binden ans Device anders als in COM üblich kein AddRef(); wegen zu hohen Overheads haben sie das nach D3D 9 abgeschafft.)

Den Artikel, der explizit das Gegenteil erklärt hatte, finde ich auch nicht mehr. Den Gedanken sollten wir begraben, bevor eine urbane Legende draus wird :)

Ich danke euch beiden!
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Krishty
Establishment
 
Beiträge: 6458
Registriert: 26.02.2009, 12:18
Benutzertext: state is the enemy


Zurück zu Grafikprogrammierung

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast