Zugreifen auf Ressourcen
Es gibt mehrere Möglichkeiten, auf Ressourcen zu zugreifen. Unabhängig davon garantiert Direct3D, dass 0 (null) für jede Ressource zurückgesetzt wird, auf die über grenzenlose Grenzen zugegriffen wird.
Zugriffs-Byteoffset
Auf zwei neue Puffertypen kann mithilfe eines Byteoffsets zugegriffen werden:
- ByteAddressBuffer ist ein schreibgeschützter Puffer.
- RWByteAddressBuffer ist ein Lese- oder Schreibpuffer.
Zugriff nach Index
Ressourcentypen können einen Index verwenden, um auf einen bestimmten Speicherort in der Ressource zu verweisen. Betrachten Sie das folgende Beispiel:
uint2 pos;
Texture2D<float4> myTexture;
float4 myVar = myTexture[pos];
In diesem Beispiel werden die vier float-Werte, die am Texel an der Pos-Position in der Texturressource myTexture 2D gespeichert sind, der Variablen myVar zugewiesen.
Hinweis
Der Standardwert für den Zugriff auf eine Textur auf diese Weise ist Mipmap-Ebene 0 (die ausführlichste Ebene).
Hinweis
Die Zeile "float4 myVar = myTexture pos ;" entspricht [ ] "float4 myVar = myTexture.Load(uint3(pos,0));". Der Zugriff nach Index ist eine neue HLSL-Syntaxerweiterung.
Hinweis
Mit dem Compiler in der Version vom Juni 2010 des DirectX SDK und höher können Sie alle Ressourcentypen mit Ausnahme von Byteadressenpuffern indizieren.
Hinweis
Mit dem Compiler vom Juni 2010 und höher können Sie lokale Ressourcenvariablen deklarieren. Sie können diesen Variablen global definierte Ressourcen (z. B. myTexture) zuweisen und sie auf die gleiche Weise wie ihre globalen Entsprechungen verwenden.
Access By Mips-Methode
Texturobjekte verfügen über eine mips-Methode (z. B. Texture2D.mips),mit der Sie die Mipmap-Ebene angeben können. In diesem Beispiel wird die Farbe gelesen, die bei (7,16) auf Mipmap-Ebene 2 in einer 2D-Textur gespeichert ist:
uint x = 7;
uint y = 16;
float4 myColor = myTexture.mips[2][uint2(x,y)];
Dies ist eine Erweiterung des Compilers vom Juni 2010 und höher. Der Ausdruck "myTexture.mips [ 2 ] [ uint2(x,y) " entspricht ] "myTexture.Load(uint3(x,y,2))".