存取資源
有數種方式可以存取 資源。 不論為何,Direct3D 保證會針對任何超出界限存取的資源傳回零。
存取位元組位移
您可以使用位元組位移來存取兩個新的緩衝區類型:
- ByteAddressBuffer 是唯讀緩衝區。
- RWByteAddressBuffer 是讀取或寫入緩衝區。
依索引存取
資源類型可以使用索引來參考資源中的特定位置。 請考慮此範例:
uint2 pos;
Texture2D<float4> myTexture;
float4 myVar = myTexture[pos];
本範例會將儲存在myTexture 2D 紋理資源中pos位置的 4 個浮點值指派給myVar變數。
注意
以這種方式存取紋理的預設值為 mipmap 層級零, (最詳細的層級) 。
注意
「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) ) 」。
相關主題