www.rolandk.de
- Aktuelle Themen zu .Net -
Achtung: Hier handelt es sich um meine alte Seite.
Die aktuelle ist unter folgendem Link erreichbar: www.rolandk.de/wp/
Home Blog Neues Tutorial für Direct3D 11




















































Neues Tutorial für Direct3D 11
Sonntag, den 28. Oktober 2012 um 09:32 Uhr

Schon seit Jahren habe ich hier auf der Seite das DirectX 10 Einstiegstutorial, welches Schritt für Schritt durch die wichtigsten Grundlagen von Direct3D führt. Da Direct3D 10 nicht mehr wirklich aktuell ist, habe ich die Tutorials kopiert und entsprechend für Direct3D 11 angepasst. Große Teile der API sind gleich, allerdings gibt es ein paar wenige grundsätzliche Unterschiede an den Konzepten und hier und da auch an den Details der API.

 

Ein Punkt etwa, den ich für jeden Artikel anpassen musste, ist das Thema mit Device und DeviceContext. Im Zuge der Anpassung der Schnittstelle zur Unterstützung mehrerer Threads wurde das früher bekannte Device Objekt geteilt in Device und DeviceContext. Das DeviceContext übernimmt dabei alle für das Rendering nötigen aufgaben. Warum? Es gibt die Möglichkeit, mit dem ImmediateContext wie gewohnt direkt über die Grafikkarte zu rendern, oder, für einen anderen Thread einen eigenen DeviceContext anzulegen, über das dieser Thread rendern kann. Die Render-Aufgaben werden aber dabei nicht an die Grafikkarte weitergeleitet, sondern nur im Speicher in einer Liste gehalten. Über den ImmediateContext schließlich kann der eigentliche Haupt-Thread die Inhalte dieser Liste zur Grafikkarte schicken.

 

Es gibt aber auch ganz andere Themen, die an der von SlimDX bereitgestellten API anders sind. Ein Beispiel hier ist das Laden eines Shaders. Über Direct3D10 sieht das folgendermaßen aus.

  1. m_effect = DX10.Effect.FromFile(
  2. device,
  3. "Shaders/SimpleRendering.fx", "fx_4_0",
  4. D3DCompiler.ShaderFlags.None, D3DCompiler.EffectFlags.None,
  5. null, null, null);

In Direct3D 11 dagegen muss man einen Umweg über das ShaderBytecode Objekt machen.

  1. D3DCompiler.ShaderBytecode shaderByteCode =
  2. D3DCompiler.ShaderBytecode.CompileFromFile(
  3. "Shaders/SimpleRendering.fx", "fx_5_0",
  4. D3DCompiler.ShaderFlags.None, D3DCompiler.EffectFlags.None);
  5. m_effect = new DX11.Effect(
  6. device, shaderByteCode);

Daneben gibt es noch ein paar andere Sachen. Im Großen und Ganzen ging die Umstellung des Tutorials aber relativ flott von der Hand. Ich habe gestern Vormittag damit begonnen und bis heute ca. 2 Stunden dafür investieren müssen.

 

Kommentar hinzufügen

Ihr Name:
Kommentar: