リソースへのアクセス
リソースにアクセスするには、いくつかの方法があります。 関係なく、Direct3D では、範囲外でアクセスされるすべてのリソースに対して 0 が返されることを保証します。
バイト オフセットによるアクセス
バイト オフセットを使用して、2 つの新しいバッファー型にアクセスできます。
- ByteAddressBuffer は読み取り専用バッファーです。
- RWByteAddressBuffer は、読み取りバッファーまたは書き込みバッファーです。
インデックスによるアクセス
リソースの種類では、インデックスを使用してリソース内の特定の場所を参照できます。 次の例について考えます。
uint2 pos;
Texture2D<float4> myTexture;
float4 myVar = myTexture[pos];
次の使用例は、myTexture 2D テクスチャ リソースの pos 位置にあるテクセルに格納されている 4 つの float 値を myVar 変数に割り当てます。
注意
この方法でテクスチャにアクセスするための既定値は、ミップマップ レベル 0 (最も詳細なレベル) です。
注意
"float4 myVar = myTexture[pos];" 行は"float4 myVar = myTexture.Load(uint3(pos,0));;" と同じです。 インデックスによるアクセスは、新しい HLSL 構文の機能強化です。
注意
2010 年 6 月バージョンの DirectX SDK 以降のコンパイラでは、 バイト アドレス バッファーを除くすべてのリソースの種類にインデックスを作成できます。
注意
2010 年 6 月以降のコンパイラでは、ローカル リソース変数を宣言できます。 これらの変数にグローバルに定義されたリソース ( myTexture など) を割り当てて、グローバルに対応するリソースと同じ方法で使用できます。
Mips メソッドによるアクセス
テクスチャ オブジェクトには mips メソッド ( Texture2D.mips など) があり、これを使用してミップマップ レベルを指定できます。 次の使用例は、ミップマップ レベル 2 の (7,16) に格納されている色を 2D テクスチャで読み取ります。
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)))" と同じです。
関連トピック