紋理物件
在 Direct3D 10 中,您可以獨立指定取樣器和紋理;紋理取樣是使用樣板化紋理物件來實作。 這個樣板化紋理物件具有特定格式、傳回特定類型,並實作數種方法。
Direct3D9 與 Direct3D10 之間的差異:
- 在 Direct3D 9 中,取樣器會系結至特定紋理。
- 在 Direct3D 10 中,紋理和取樣器是獨立的物件。 每個樣板化紋理物件都會實作紋理取樣方法,以紋理和取樣器作為輸入參數。
並非所有函式都支援所有格式。 因此,您應該使用 CheckFeatureSupport 來檢查特定用法是否支援格式。
以下是建立所有紋理物件的語法(多取樣物件除外)。
Object1 [ < Type > ] Name ; |
---|
多重取樣物件 (Texture2DMS 和 Texture2DMSArray) 需要明確陳述紋理大小,並以樣本數目表示。
Object2 [ < Type, Samples > ] Name ; |
---|
參數
項目 | 說明 | ||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Object |
紋理物件。 必須是下列其中一種類型。
|
||||||||||||||||||||||||
類型 |
選擇性。 任何 純量 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 | |||||
收集 | 取得取樣紋理時,將用於雙線性插補的四個樣本(僅限紅色元件)。 | x | x | x | |||
GetDimensions | 取得指定 Mipmap 層級的紋理維度。 | x | x | x | x | x | x |
GetDimensions (MultiSample) | 取得指定 Mipmap 層級的紋理維度。 | x | x | x | |||
GetSamplePosition | 取得指定範例的位置。 | x | x | x | |||
載入 | 載入資料,而不需要任何篩選或取樣。 | x | x | x | x | x | x |
載入 (Multisample) | 載入資料,而不需要任何篩選或取樣。 | x | x | x | x | ||
範例 | 取樣紋理。 | x | x | ||||
SampleBias | 將偏差值套用至 mipmap 層級之後,取樣紋理。 | x | x | ||||
SampleCmp | 使用比較值來取樣紋理,以拒絕樣本。 | x | x | ||||
SampleCmpLevelZero | 取樣紋理 (僅限 mipmap 層級 0),使用比較值來拒絕樣本。 | x | x | x | x | x | x |
SampleGrad | 使用漸層取樣紋理,以影響取樣位置的計算方式。 | x | x | x | x | x | x |
SampleLevel | 在指定的 Mipmap 層級上取樣紋理。 | x | x | x | x | x | x |
傳回類型
除非另有指定,否則紋理物件方法的傳回型別為 float4,除了一律需要指定類型和樣本計數的多取樣反別名紋理物件除外。 傳回類型與紋理資源類型相同( DXGI_FORMAT )。 換句話說,它可以是下列任何類型。
類型 | 描述 |
---|---|
float | 32 位浮點數(如需 IEEE float 的差異,請參閱 浮點數規則 ) |
int | 32 位元帶正負號的整數 |
不帶正負號的整數 | 32 位元不帶正負號的整數 |
snorm | 範圍 -1 到 1 的 32 位 float (如需 IEEE float 的差異,請參閱 浮點數規則 ) |
unorm | 範圍 0 到 1 的 32 位浮點數(如需 IEEE float 的差異,請參閱 浮點數規則 ) |
任何紋理類型或結構 | 傳回的元件數目必須介於 1 到 3 之間。 |
此外,傳回型別可以是任何紋理類型,包括 結構,但是它必須小於 4 個元件,例如會傳回一個元件的 float1 類型。
紋理中遺漏元件的預設值
紋理資源類型中遺漏元件的預設值為零,但 Alpha 元件除外(A):遺漏 A 的預設值為一。 這個著色器顯示的方式取決於紋理資源類型。 它採用實際存在於紋理資源類型中之第一個具型別元件的形式(從左側以 RGBA 順序開始)。 如果此表單為 UNORM 或 FLOAT,則遺漏 A 的預設值為 1.0f。 如果表單為 SINT 或 UINT,則遺漏 A 的預設值會0x1。
例如,當著色器讀取 DXGI_FORMAT_R24_UNORM_X8_TYPELESS 紋理資源類型時,G 和 B 的預設值為零,A 的預設值為 1.0f;當著色器讀取 DXGI_FORMAT_R16G16_UINT 紋理資源類型時,B 的預設值為零,而 A 的預設值為 0x00000001;當著色器讀取DXGI_FORMAT_R16_SINT 紋理資源類型、G 和 B 的預設值為零,A 的預設值為 0x00000001。
範例 2
以下是使用紋理方法進行紋理取樣的範例。
sampler MySamp;
Texture2D <float4> MyTex;
float4 main( float2 TexCoords[2] : TEXCOORD ) : SV_Target
{
return MyTex.Sample( MySamp, TexCoords[0] ));
}
最小著色器模型
下列著色器模型中支援此物件。
著色器模型 | 支援 |
---|---|
著色器模型 4 和更高的著色器模型 | 是 |