几何着色器
几何着色器以完整的图元作为输入数据。例如绘制三角形列表时,几何着色器处理的是列表中的每个三角形。顶点着色器无法创建或销毁顶点,而几何着色器可以创建销毁几何体。在离开几何着色器之前,顶点坐标必须变换到齐次裁剪空间。
几何着色器编程与顶点/像素着色器相似,一般格式如下
[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>:描述三角形线带的顶点列表。
使用Appe