Acceso a recursos
Hay varias maneras de acceder a los recursos. Independientemente de, Direct3D garantiza que devuelve cero para cualquier recurso al que se tenga acceso fuera de los límites.
Desplazamiento de bytes de acceso
Se puede acceder a dos nuevos tipos de búfer mediante un desplazamiento de bytes:
- ByteAddressBuffer es un búfer de solo lectura.
- RWByteAddressBuffer es un búfer de lectura o escritura.
Acceso por índice
Los tipos de recursos pueden usar un índice para hacer referencia a una ubicación específica del recurso. Considere este ejemplo:
uint2 pos;
Texture2D<float4> myTexture;
float4 myVar = myTexture[pos];
En este ejemplo se asignan los 4 valores flotantes almacenados en el elemento de textura ubicado en la posición pos del recurso de textura myTexture 2D a la variable myVar .
Nota
El valor predeterminado para acceder a una textura de esta manera es el nivel mipmap cero (el nivel más detallado).
Nota
La línea "float4 myVar = myTexture[pos];" equivale a "float4 myVar = myTexture.Load(uint3(pos,0));". El acceso por índice es una nueva mejora de la sintaxis HLSL.
Nota
El compilador de la versión de junio de 2010 del SDK de DirectX y versiones posteriores le permite indexar todos los tipos de recursos, excepto los búferes de direcciones de bytes.
Nota
El compilador de junio de 2010 y versiones posteriores le permite declarar variables de recursos locales. Puede asignar recursos definidos globalmente (como myTexture) a estas variables y usarlos de la misma manera que sus homólogos globales.
Access by Mips (método)
Los objetos texture tienen un método mips (por ejemplo, Texture2D.mips), que puede usar para especificar el nivel de mapa mip. En este ejemplo se lee el color almacenado en (7,16) en el nivel de mapa mip 2 en una textura 2D:
uint x = 7;
uint y = 16;
float4 myColor = myTexture.mips[2][uint2(x,y)];
Se trata de una mejora del compilador de junio de 2010 y versiones posteriores. La expresión "myTexture.mips[2][uint2(x,y)]" equivale a "myTexture.Load(uint3(x,y,2)))".
Temas relacionados