Texture オブジェクト
Direct3D 10 では、サンプラーとテクスチャを個別に指定します。テクスチャ サンプリングは、テンプレート テクスチャ オブジェクトを使用して実装されます。 このテンプレート テクスチャ オブジェクトは、特定の形式を持ち、特定の型を返し、いくつかのメソッドを実装します。
Direct3D9 と Direct3D10 の違い:
- Direct3D 9 では、サンプラーは特定のテクスチャにバインドされます。
- Direct3D 10 では、テクスチャとサンプラーは独立したオブジェクトです。 各テンプレート テクスチャ オブジェクトは、テクスチャとサンプラーの両方を入力パラメーターとして受け取るテクスチャ サンプリング メソッドを実装します。
すべての関数ですべての形式がサポートされているわけではありません。 そのため、CheckFeatureSupport を使用して、特定の用途でフォーマットがサポートされているかどうかを確認する必要があります。
すべてのテクスチャ オブジェクト (マルチサンプリング オブジェクトを除く) を作成するための構文を次に示します。
Object1 [<Type>] Name; |
---|
マルチサンプリング オブジェクト (Texture2DMS および Texture2DMSArray) では、テクスチャ サイズを明示的に指定し、サンプルの数として表す必要があります。
Object2 [<Type, Samples>] Name; |
---|
パラメーター
Item | 説明 | ||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
オブジェクト |
テクスチャ オブジェクト。 次の型のうちの 1 つでなければなりません。
|
||||||||||||||||||||||||
Type |
省略可能。 山かっこで囲まれた任意のスカラー HLSL 型 または ベクター HLSL 型。 既定の型は float4 です。 |
||||||||||||||||||||||||
名前 |
テクスチャ オブジェクト名を指定する ASCII 文字列。 |
||||||||||||||||||||||||
サンプル |
サンプルの数 (1 ~ 128 の範囲)。 |
例 1
テクスチャ オブジェクトを宣言する例を次に示します。
Texture2D <float4> MyTex;
Texture2DMS <float4, 128> MyMSTex;
テクスチャ オブジェクト メソッド
各テクスチャ オブジェクトは、特定のメソッドを実装します。すべてのメソッドを一覧表示する表を次に示します。 各メソッドのリファレンス ページを参照して、そのメソッドを使用できるオブジェクトを確認してください。
Texture メソッド | 説明 | vs_4_0 | vs_4_1 | ps_4_0 | ps_4_1 | gs_4_0 | gs_4_1 |
---|---|---|---|---|---|---|---|
CalculateLevelOfDetail | LOD を計算し、クランプされた結果を返します。 | x | |||||
CalculateLevelOfDetailUnclamped | LOD を計算し、アンクランプされた結果を返します。 | x | |||||
Gather | テクスチャをサンプリングするときにバイリニア補間に使用される 4 つのサンプル (赤のコンポーネントのみ) を取得します。 | x | x | x | |||
GetDimensions | 指定したミップマップ レベルのテクスチャ ディメンションを取得します。 | x | x | x | x | x | x |
GetDimensions (MultiSample) | 指定したミップマップ レベルのテクスチャ ディメンションを取得します。 | x | x | x | |||
GetSamplePosition | 指定したサンプルの位置を取得します。 | x | x | x | |||
積載量 | フィルター処理やサンプリングを行わずにデータを読み込みます。 | x | x | x | x | x | x |
Load (マルチサンプル) | フィルター処理やサンプリングを行わずにデータを読み込みます。 | x | x | x | x | ||
サンプル | テクスチャをサンプリングします。 | x | x | ||||
SampleBias | ミップマップ レベルにバイアス値を適用した後、テクスチャをサンプリングします。 | x | x | ||||
SampleCmp | 比較値を使用してサンプルを拒否するテクスチャをサンプリングします。 | x | x | ||||
SampleCmpLevelZero | 比較値を使用してサンプルを拒否し、テクスチャをサンプリングします (ミップマップ レベル 0 のみ)。 | x | x | x | x | x | x |
SampleGrad | グラデーションを使用してテクスチャをサンプリングし、サンプルの位置の計算方法に影響を与えます。 | x | x | x | x | x | x |
SampleLevel | 指定したミップマップ レベルでテクスチャをサンプリングします。 | x | x | x | x | x | x |
返り値の種類
テクスチャ オブジェクト メソッドの戻り値の型は、特に指定しない限り float4 です。ただし、指定された型とサンプル数が常に必要なマルチサンプリング アンチエイリアス テクスチャ オブジェクトは例外です。 戻り値の型は、テクスチャ リソースの種類 (DXGI_FORMAT) と同じです。 つまり、次のいずれかの型になります。
型 | 説明 |
---|---|
float | 32 ビット浮動小数点 (IEEE 浮動小数点との違いについては浮動小数点規則を参照 ) |
int | 32 ビット符号付き整数 |
unsigned int | 32 ビット符号なし整数 |
snorm | -1 ~ 1 の範囲の 32 ビット浮動小数点 (IEEE 浮動小数点との違いについては浮動小数点規則 を参照) |
unorm | 0 ~ 1 の範囲の 32 ビット浮動小数点 (IEEE 浮動小数点との違いについては浮動小数点規則 を参照) |
任意のテクスチャの種類または構造体 | 返されるコンポーネントの数は、1 ~ 3 の範囲である必要があります。 |
さらに、戻り値の型には構造体を含む任意のテクスチャ型を指定できますが、1 つのコンポーネントを返す float1 型など、4 個未満のコンポーネントである必要があります。
テクスチャ内の不足しているコンポーネントの既定値
テクスチャ リソースの種類に存在しないコンポーネントの既定値は、アルファ コンポーネント (A) を除くすべてのコンポーネントに対して 0 です。不足している A の既定値は 1 です。 これがシェーダーに表示される方法は、テクスチャ リソースの種類によって異なります。 テクスチャ リソースの種類に実際に存在する最初の型指定されたコンポーネントの形式を受け取ります (RGBA の順序で左から始まります)。 このフォームが UNORM または FLOAT の場合、不足している A の既定値は 1.0f です。 フォームが SINT または UINT の場合、不足している A の既定値は 0x1 です。
たとえば、シェーダーがDXGI_FORMAT_R24_UNORM_X8_TYPELESS テクスチャ リソースの種類を読み取ると、G と B の既定値は 0 で、A の既定値は 1.0f です。シェーダーが DXGI_FORMAT_R16G16_UINT テクスチャ リソースの種類を読み取ると、B の既定値は 0 になり、A の既定値は 0x00000001 されます。シェーダーが DXGI_FORMAT_R16_SINT テクスチャ リソースの種類を読み取ると、G と B の既定値は 0 で、A の既定値は 0x00000001 です。
例 2
テクスチャ メソッドを使用したテクスチャ サンプリングの例を次に示します。
sampler MySamp;
Texture2D <float4> MyTex;
float4 main( float2 TexCoords[2] : TEXCOORD ) : SV_Target
{
return MyTex.Sample( MySamp, TexCoords[0] ));
}
最小シェーダー モデル
このオブジェクトは、次のシェーダー モデルでサポートされています。
シェーダー モデル | サポートされています |
---|---|
シェーダー モデル 4 以降のシェーダー モデル | はい |