網域著色器 (DS) 階段
網域著色器 (DS) 階段 會定義輸出填補中的細分點頂點位置;它會計算對應至每個網域樣本的頂點位置。 網域著色器會在每個鑲嵌階段輸出點執行一次,且具有輪廓著色器輸出填補和輸出填補常數,以及鑲嵌階段輸出 UV 座標的唯讀存取權限。
用途和使用方式
網域著色器 (DS) 階段會根據來自輪廓著色器 (HS) 階段和鑲嵌 (TS) 階段的輸入,輸出在輸出填補中的細分點頂點位置。
輸入
- 網域著色器會使用來自輪廓著色器 (HS) 階段的輸出控制點。 輪廓著色器的輸出會包括:
- 控制點。
- 填補常數資料。
- 鑲嵌係數。 鑲嵌係數可包括固定函式鑲嵌所使用的值及原始值 (例如整數鑲嵌四捨五入前的值),可用來輔助幾何變形等作業。
- 網域著色器會針對來自鑲嵌 (TS) 階段的每個輸出座標叫用一次。
輸出
- 網域著色器 (DS) 階段會輸出輸出填補中的細分點頂點位置。
網域著色器完成後,就會完成鑲嵌作業,而管線資料也會繼續傳送至下一個管線階段,例如幾何著色器 (GS) 階段和像素著色器 (PS) 階段。 在鑲嵌作用中期間,預期取得具有相鄰之原始物件 (例如每個三角形 6 個頂點) 的幾何著色器將不具效用 (這會造成為定義的行為,而偵錯層則會對此產生回報)。
範例
void main( out MyDSOutput result,
float2 myInputUV : SV_DomainPoint,
MyDSInput DSInputs,
OutputPatch<MyOutPoint, 12> ControlPts,
MyTessFactors tessFactors)
{
...
result.Position = EvaluateSurfaceUV(ControlPoints, myInputUV);
}
相關主題