访问资源
可通过多种方式访问 资源。 无论如何,Direct3D 保证为超出边界访问的任何资源返回零。
按字节偏移的访问
可以使用字节偏移量访问两个新的缓冲区类型:
- ByteAddressBuffer 是只读缓冲区。
- RWByteAddressBuffer 是读取或写入缓冲区。
按索引访问
资源类型可以使用索引来引用资源中的特定位置。 请看以下示例:
uint2 pos;
Texture2D<float4> myTexture;
float4 myVar = myTexture[pos];
此示例将存储在 myTexture 2D 纹理资源中 pos 位置的纹素上的 4 个浮点值分配给 myVar 变量。
注意
以这种方式访问纹理的默认级别为 mipmap 级别 0 (最详细的级别) 。
注意
“float4 myVar = myTexture[pos];;”行等效于“float4 myVar = myTexture.Load (uint3 (pos,0) ) ;”。 按索引访问是一项新的 HLSL 语法增强功能。
注意
2010 年 6 月版 DirectX SDK 及更高版本中的编译器允许为除 字节地址缓冲区之外的所有资源类型编制索引。
注意
2010 年 6 月编译器及更高版本允许声明本地资源变量。 可以将全局定义资源 ((如 myTexture) )分配给这些变量,并使用它们的方式与其全局对应变量相同。
按 Mips 方法访问
纹理对象具有 mips 方法 (例如 Texture2D.mips) ,可用于指定 mipmap 级别。 此示例读取存储在 2D 纹理中 mipmap 级别 2 (7,16) 的颜色:
uint x = 7;
uint y = 16;
float4 myColor = myTexture.mips[2][uint2(x,y)];
这是 2010 年 6 月编译器及更高版本的增强功能。 “myTexture.mips[2][uint2 (x,y) ]”表达式等效于“myTexture.Load (uint3 (x,y,2) ) ”。
相关主题