紋理物件

在 Direct3D 10 中,您可以獨立指定取樣器和紋理;紋理取樣是使用樣板化紋理物件來實作。 這個樣板化紋理物件具有特定格式、傳回特定類型,並實作數種方法。

Direct3D9 與 Direct3D10 之間的差異:

  • 在 Direct3D 9 中,取樣器會系結至特定紋理。
  • 在 Direct3D 10 中,紋理和取樣器是獨立的物件。 每個樣板化紋理物件都會實作紋理取樣方法,以紋理和取樣器作為輸入參數。

並非所有函式都支援所有格式。 因此,您應該使用 CheckFeatureSupport 來檢查特定用法是否支援格式。

以下是建立所有紋理物件的語法(多取樣物件除外)。

Object1 [ < Type > ] Name ;

多重取樣物件 (Texture2DMS 和 Texture2DMSArray) 需要明確陳述紋理大小,並以樣本數目表示。

Object2 [ < Type, Samples > ] Name ;

參數

項目 說明
Object
紋理物件。 必須是下列其中一種類型。
Object1 類型 描述
緩衝區 緩衝區
Texture1D 1D 紋理
Texture1DArray 1D 紋理的陣列
Texture2D 2D 紋理
Texture2DArray 2D 紋理的陣列
Texture3D 3D 紋理
TextureCube 立方體紋理
TextureCubeArray Cube 紋理的陣列
Object2 類型 描述
Texture2DMS 2D 多重取樣紋理
Texture2DMSArray 2D 多重取樣紋理的陣列

  1. Buffer 類型支援 GetDimensions 以外的大多數紋理物件方法。
  2. TextureCubeArray 適用于著色器模型 4.1 或更高版本。
  3. 著色器模型 4.1 適用于 Direct3D 10.1 或更高版本。

類型

選擇性。 任何 純量 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 和更高的著色器模型

另請參閱

著色器模型 4