DirectX 11 學習筆記-06【幾何着色器】

幾何着色器 

幾何着色器以完整的圖元作爲輸入數據。例如繪製三角形列表時,幾何着色器處理的是列表中的每個三角形。頂點着色器無法創建或銷燬頂點,而幾何着色器可以創建銷燬幾何體。在離開幾何着色器之前,頂點座標必須變換到齊次裁剪空間。 

幾何着色器編程與頂點/像素着色器相似,一般格式如下 

[maxvertexcount(N)] 

void ShaderName ( 

PrimitiveType InputVertexType InputName [NumElements], 

inout StreamOutputObject<OutputVertexType>OutputName) 

{ 

// Geometry shader body... 

} 

maxvertexcount屬性用於指定幾何着色器每次輸出的頂點的最大數量。從性能上考慮maxvertexcount的值應當儘可能小。 

幾何着色器一般有一個輸入參數和一個輸出參數。輸入參數總是一個頂點數組,它可以表示單個頂點,直線,三角形,四個頂點構成的鄰接信息的直線和6個頂點構成的帶有鄰接信息的三角形。輸入頂點類型與頂點着色器的返回類型相同。此外必須加上一個圖元類型的前綴用於描述輸入圖元的類型,可用的參數有point、line、triangle、lineadj和triangleadj。 

輸出參數是一個由inout修飾的流對象,一共有三種類型 

PointStream<OutputVertexType>:描述單個點的頂點列表。 

LineStream<OutputVertexType>:描述直線線帶的頂點列表。 

TriangleStream<OutputVertexType>:描述三角形線帶的頂點列表。 

使用Append可用向流對象中添加輸出頂點。對直線和三角,輸出總是一個線代帶,但可以用RestartStrip模擬輸出直線列表和三角形列表。 

給定一個輸入圖元,幾何着色器可以不對它進行輸出,這樣輸入幾何體就會被“銷燬”。當幾何着色器輸出的頂點無法構成一個完整的圖元時,這部分圖元會被丟棄。 

除了這兩參數之外,還可以額外包含一個由SV_PrimitiveID 語義修飾的特殊的無符號整數參數。當指定該參數時,input assembler階段會爲每個圖元生成一個圖元id,第一個被標記爲0,第二個爲1以此類推。圖元id只在每次draw call纔是唯一的。 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章