Zugreifen auf Ressourcen
Es gibt mehrere Möglichkeiten, auf Ressourcen zuzugreifen. Unabhängig davon garantiert Direct3D, dass für jede Ressource, auf die außerhalb der Grenzen zugegriffen wird, null zurückgegeben wird.
Access By Byte Offset
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 4 Floatwerte, die auf dem Texel an der Position pos in der myTexture 2D-Texturressource gespeichert sind, der myVar-Variablen zugewiesen.
Hinweis
Die Standardeinstellung für den Zugriff auf eine Textur auf diese Weise ist mipmap level zero (die detaillierteste Ebene).
Hinweis
Die Zeile "float4 myVar = myTexture[pos];" entspricht "float4 myVar = myTexture.Load(uint3(pos,0));". Access by Index ist eine neue HLSL-Syntaxerweiterung.
Hinweis
Mit dem Compiler in der Version juni 2010 des DirectX SDK und höher können Sie alle Ressourcentypen mit Ausnahme von Byteadresspuffern indiziert.
Hinweis
Mit dem Compiler 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))".
Zugehörige Themen