2009-05-07 4 views
1

Herren und geschätzte Damen.Gibt es COM-Exposition für Direct3D 10

Ich habe diese Frage im COM-Forum bei Code Project gepostet und bekam eine rotzig Antwort, also hoffentlich werden Sie hilfreicher sein.

Ich sehe, dass Microsoft eine COM-Bibliothek für Direct3D 9 mit GUID 81BDCBCA-64D4-426d-AE8D-AD0147F4275C ausgesetzt hat.

Hat Microsoft Direct3D 10 auf COM ausgesetzt und wenn ja, was ist die GUID der Schnittstelle?

Vielen Dank im Voraus.

Antwort

4

Aus der Dokumentation auf MSDN sieht es so aus, als ob sie von einem IDirect3D9-Objekt mit Elementfunktionen wie IDirect3D9::CreateDevice zu globalen Funktionen wie D3D10CreateDevice übergegangen sind. Mit Direct3D 10 haben sie viele der Funktionen aufgeteilt, die in IDirect3D9 in Bezug auf (zum Beispiel) Adapter in die DirectX Graphics Infrastructure (DXGI) waren.

Mit anderen Worten, Direct3D 10 verwendet immer noch COM, aber nein, es gibt kein Gegenstück von IDirect3D9. Dinge, für die Sie IDirect3D9 verwendet haben, werden jetzt auf andere Weise ausgeführt.

Edit: Die COM-Klasse mit der GUID oben ist IDirect3D9. Direct3D 10 hat keine aktualisierte Version von diesem (es gibt kein IDirect3D10, das die Dinge tut, die IDirect3D9 tut); Stattdessen wurden die Elementfunktionen dieser Klasse in globale Funktionen (wie D3D10CreateDevice) aufgeteilt, die Sie direkt anstatt über ein Objekt aufrufen, und in die DXGI-Klassen (z. B. IDXGIOutput). Sie benötigen kein IDirect3D10-Objekt, da die Aufgaben, für die Sie es verwenden würden, jetzt auf unterschiedliche Weise ausgeführt werden.

Sie sollten in der Lage sein, GUIDs COM-Klassennamen zuzuordnen, indem Sie die Direct3D-Headerdateien für das Makro DEFINE_GUID durchsuchen.

+0

Dude das ist fantastisch. Tut mir leid, ich verstehe jetzt, dass meine Frage nicht 100% in die richtige Richtung ging. Aber jetzt, da ich die GUIDS in den Header-Dateien sehe, verstehe ich genau, was du meinst. Schuss für die Hilfe! –

+0

Ich bin froh, dass ich helfen konnte, es sinnvoll zu machen :-) –

0

In COM werden die Bibliotheksinformationen, nach denen Sie suchen, in einer Typbibliothek (TLB-Datei) codiert. Seit DirectX 8.0 vor fast zehn Jahren hat Direct3D für keines seiner Objekte eine Typbibliothek oder CoCreateInstance verwendet. Direct3D verwendet COM-Schnittstellen für die Verwaltung der Lebensdauer ihrer Objekte und das ist es. Sie verwenden QueryInterface nicht viel. Der Großteil der COM-Infrastruktur gilt nicht für die Schnittstellen, die von Direct3D und den ihnen zugeordneten Objekten verwendet werden.

Sie verwenden CoCreateInstance nicht zum Erstellen ihrer Objekte, sondern bieten stattdessen eine einzelne Factory-Funktion (wie Direct3DCreate9), von der Sie eine Basisschnittstelle erhalten und Creator-Methoden von dieser Basisschnittstelle verwenden, um alles andere zu erhalten. In Direct3D 10 erkannten sie, dass die Basisschnittstelle, die Anzeigen und so weiter aufzählte, stabil und gleich für D3D 8 und D3D 9 war, sodass sie in eine stabile Basisschnittstelle IDXGIFactory verschoben wurden. Der gleiche DXGI-Code wird für D3D 10, 10.1 und 11 verwendet.

Verwandte Themen