访问资源

可通过多种方式访问 资源。 无论如何,Direct3D 保证为超出边界访问的任何资源返回零。

按字节偏移的访问

可以使用字节偏移量访问两个新的缓冲区类型:

按索引访问

资源类型可以使用索引来引用资源中的特定位置。 请看以下示例:

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) ) ”。

计算着色器概述