DirectX 11 学习笔记-06【几何着色器】

几何着色器 

几何着色器以完整的图元作为输入数据。例如绘制三角形列表时,几何着色器处理的是列表中的每个三角形。顶点着色器无法创建或销毁顶点,而几何着色器可以创建销毁几何体。在离开几何着色器之前,顶点坐标必须变换到齐次裁剪空间。 

几何着色器编程与顶点/像素着色器相似,一般格式如下 

[maxvertexcount(N)] 

void ShaderName ( 

PrimitiveType InputVertexType InputName [NumElements], 

inout StreamOutputObjectOutputName) 

{ 

// Geometry shader body... 

} 

maxvertexcount属性用于指定几何着色器每次输出的顶点的最大数量。从性能上考虑maxvertexcount的值应当尽可能小。 

几何着色器一般有一个输入参数和一个输出参数。输入参数总是一个顶点数组,它可以表示单个顶点,直线,三角形,四个顶点构成的邻接信息的直线和6个顶点构成的带有邻接信息的三角形。输入顶点类型与顶点着色器的返回类型相同。此外必须加上一个图元类型的前缀用于描述输入图元的类型,可用的参数有point、line、triangle、lineadj和triangleadj。 

输出参数是一个由inout修饰的流对象,一共有三种类型 

PointStream:描述单个点的顶点列表。 

LineStream:描述直线线带的顶点列表。 

TriangleStream:描述三角形线带的顶点列表。 

使用Append可用向流对象中添加输出顶点。对直线和三角,输出总是一个线代带,但可以用RestartStrip模拟输出直线列表和三角形列表。 

给定一个输入图元,几何着色器可以不对它进行输出,这样输入几何体就会被“销毁”。当几何着色器输出的顶点无法构成一个完整的图元时,这部分图元会被丢弃。 

除了这两参数之外,还可以额外包含一个由SV_PrimitiveID 语义修饰的特殊的无符号整数参数。当指定该参数时,input assembler阶段会为每个图元生成一个图元id,第一个被标记为0,第二个为1以此类推。图元id只在每次draw call才是唯一的。 

你可能感兴趣的:(C++,DirectX)