Wechsel von DirectX 10 zu DirectX 11

10

Ich habe eine angemessene Anzahl kleiner Hobbyprojekte mit DirectX 9 durchgeführt, aber es ist jetzt Zeit, auf DirectX 11 umzusteigen.

Ich habe Frank Luna'a Buch über 3D-Programmierung mit DirectX 10, aber nichts über DirectX 11. Ich glaube, sie sind ziemlich ähnlich, habe mich aber gefragt, ob jemand die Hauptunterschiede auf Codeebene aufzählen könnte, die ich beachten muss ( oder auf eine vorhandene Quelle verweisen).

JohnB
quelle
Verwandte gamedev.stackexchange.com/questions/2362/…
Die kommunistische Ente
Ich habe gehört, dass DX10 wirklich anders und nicht abwärtskompatibel mit DX9 ist, während DX11 abwärtskompatibel mit DX9 ist.
Jokoon
DX10 ist ganz anders als DX9, aber DX11 ist DX10 ziemlich ähnlich. Ich wollte nur wissen, was die Unterschiede sind. Seltsamerweise funktioniert DX11 mit DX9-Hardware, DX10 jedoch nicht;)
JohnB

Antworten:

15

Die SDK-Dokumentation enthält einen Abschnitt zur Migration auf 11 , der sowohl von 9 als auch von 10 behandelt wird. Außerdem gibt es die Seite mit den D3D11-Funktionen .

Eine der größten Änderungen in Bezug auf die API-Form zwischen 10 und 11 besteht darin, dass 11 eine Reihe von Methoden vom Gerät selbst auf eine neue Schnittstelle verschiebt, die ( ID3D11DeviceContextspeziell) als Gerätekontext bezeichnet wird , um die neuen Multithreading-Funktionen zu unterstützen.

Sobald Sie sich der Änderung bewusst sind, ist es jedoch recht einfach, sich darauf einzustellen: Wo Sie in 10 " someDevice->Draw()" genannt hätten, erhalten Sie stattdessen den unmittelbaren Kontext für das Gerät und rufen " immediateContext->Draw()."

Die andere große Änderung besteht darin, dass die Effekt-API aus dem Kern herausgezogen und eine unabhängige Quelldistribution erstellt wird, die Sie selbst kompilieren und verknüpfen müssen. Möglicherweise stellen Sie auch fest, dass einige D3DX-Schnittstellen und -Funktionen veraltet oder entfernt wurden.

Darüber hinaus gibt es eine Handvoll neuer Parameter für einige Funktionen und eine Handvoll zusätzlicher Felder in Strukturen usw. Beispielsweise verfügt das Pufferbeschreibungsobjekt in 11 über ein zusätzliches StructureByteStrideFeld, das nicht in 10 enthalten ist , und die Geräteerstellung umfasst das Übergeben werden Informationen auf Funktionsebene übergeben. Außerdem gibt es die offensichtlichen und oben genannten Änderungen bei den Schnittstellennamen (10s durch 11s ersetzt).


quelle
Danke, genau das, was ich brauchte. Ich suchte nach einem offiziellen Leitfaden für das, was sich geändert hatte, schaffte es aber irgendwie nicht, ihn zu finden. Vielen Dank für diese Antwort und die anderen Leute, die sich die Zeit genommen haben, auch mit guten Antworten zu helfen :)
JohnB
Das ist lustig, wie man diese Sachen schnell vergisst. Ich hasste besonders die Effektzusammenstellung und es dauerte einige Tage, bis sie funktionierte. Aber ich habe es nicht in meine Antwort aufgenommen ...
Notabene
Ich wollte dies als Frage posten, stellte jedoch fest, dass Ihre Antwort bereits die meisten meiner Bedenken abdeckt, obwohl ich eine Bestätigung möchte. Für jemanden, der nur mit DX9 gearbeitet hat, aber sein Wissen verbessern möchte, bringt mir das Aufnehmen eines DX11-Buches nicht nur (offensichtlich) etwas über DX11 bei, sondern gibt mir auch genug Wissen, um bei Bedarf mit DX10 zu arbeiten?
David Gouveia
Ja, so ziemlich.
1

Ich denke, der Hauptunterschied ist, dass in DX11 der DXFont weg ist, ansonsten ist es so ziemlich wie notabene gesagt hat. Sie sollten mit diesem DX10-Buch gut zurechtkommen. Ich habe diesen verwendet, als ich zu DX11 gewechselt bin, und ich hatte keine Probleme. Sie müssen sich von Zeit zu Zeit die msdn ansehen, es gibt jedoch einige geringfügige Unterschiede in der API und an einigen Stellen des IIRC.

dotminic
quelle
1

Es besteht keine Notwendigkeit, Änderungen vorzunehmen. Directx11 fügt nur neue Funktionen hinzu. Sie ändern nur die Nummern von ID3D10 in ID3D11 usw.


DirectX11 fügt hinzu (wenn nicht über gehypte HW-Tessalisierung gesprochen wird). Direct Compute: API für die GPGPU mit hervorragender Verbindung zur Grafik-Pipe-Linie (ich kann dies nicht über CUDA oder openCL sagen). Und die Möglichkeit mehrerer RW-Texturen und -Puffer auf einem Pixel-Shader, was viele neue Möglichkeiten eröffnet.

Notabene
quelle