結構類型

使用下列語法,使用 HLSL 宣告結構。

struct Name{ [InterpolationModifier] Type[RxC] MemberName; ... };

參數

名字

可唯一識別結構名稱的 ASCII 字串。

[InterpolationModifier]

選擇性修飾詞,指定插補型別。 如需詳細資訊 ,請參閱

Type[RxC]

具有選擇性資料列 (R) x 資料行 (C) 陣列大小的成員類型。 結構至少包含一個專案;如果它包含多個元素,則元素全都屬於相同的類型。 資料列和資料行的數目是介於 1 到 4 之間的不帶正負號整數。

MemberName

可唯一識別成員名稱的 ASCII 字串。

備註

您可以在任何結構成員或圖元著色器函式的引數上指定插補修飾詞。 如果這兩個位置出現修飾詞,外部修飾詞 (圖元著色器引數修飾詞,) (結構修飾詞) 覆寫內部修飾詞。

編譯著色器或效果時,著色器編譯器會根據 HLSL 封裝規則來封裝結構成員。

著色器模型 4 中引進的插補修飾詞

用於圖元著色器輸入的頂點著色器輸出會以線性方式插補,以在點陣化期間取得每個圖元的值。 若要設定插補方法,請使用著色 器模型 4 或更新版本中支援的任何值。 任何未做為圖元著色器輸入的頂點著色器輸出都會忽略修飾詞。

插補修飾詞 Description
linear 在著色器輸入之間插補;如果未指定插補修飾詞, 則 linear 是預設值。
質心 在圖元涵蓋區域內的樣本之間插補, (這可能需要從圖元中心) 推斷端點。 如果部分涵蓋圖元 (即使圖元中心未涵蓋) ,距心取樣也可能改善反鋸齒。 距心修飾詞必須結合線性noperspective修飾詞。
nointerpolation 請勿插入 。
noperspective 請勿在插補期間執行檢視方塊修正。 noperspective修飾詞可以與心形修飾詞結合。
樣品 適用于著色器模型 4.1 和更新版本在範例位置插入,而不是在圖元中心插入。 這會導致圖元著色器執行每個樣本,而不是每個圖元。 造成每個樣本執行的另一種方式是具有 語意SV_SampleIndex的輸入,這表示目前的範例。 只有指定 樣本 的輸入 (或輸入SV_SampleIndex) 在圖元中的著色器調用之間有所不同,而其他未指定修飾詞的輸入則 (例如,如果您在不同的輸入上混用修飾詞,) 仍然插補圖元中心。 圖元著色器調用和深度/樣板測試都會針對圖元中每個涵蓋的樣本進行。 這有時稱為 超級取樣。 相反地,如果沒有稱為 多重取樣的取樣頻率叫用,不論涵蓋多少樣本,圖元著色器都會在每個圖元叫用一次,而深度/樣板測試則會以取樣頻率進行。 這兩種模式都提供對等邊緣反鋸齒。 不過,超級取樣會更頻繁地叫用圖元著色器,以提供更佳的陰影品質。
1.使用 int/uint 類型時,唯一有效的選項是 **nointerpolation**。

插補修飾詞可以套用至結構成員或 函式引數,或兩者。

範例

以下是一些範例結構宣告。

struct struct1
{
  int    a;
}

此宣告包含陣列。

struct struct2
{
  int    a;
  float  b;
  int4x4 iMatrix;
}

此宣告包含插補修飾詞。

struct In
{
  centroid float2 Texcoord;
};

另請參閱

(DirectX HLSL)