OpenGL几何着色器(geometry shader)
除了顶点着色器(vertex shader)和片元着色器(fragment shader).
OpenGL还提供了一个可选的几何着色器(geometry shader). 其位于顶点着色器和几何着色器之间.
- 如没有使用几何着色器,则顶点着色器输出到片元着色器.
- 若使用几何着色器,顶点着色器输出组成一个基础图元的顶点信息到几何着色器,经过几何着色器处理后,再输出到片元着色器. 几何着色器能够产生0个以上的基础图元(Primitive),它能起到一定的裁剪作用.同时也能产生比顶点着色器输入更多的基础图元.
几何着色器的基本概念
几何着色器在启用后,它将获得顶点着色器以组成一个基础图元为一组的顶点输入,通过对输入的顶点进行处理,几何着色器将决定输出的图元类型和个数.
在几何着色器中in和out分别指示了输入的图元,和输出的图元等参数.
几何着色器输入模式 | 顶点着色器输入 | 顶点最少个数 |
---|---|---|
points | GL_POINTS | 1 |
lines | GL_LINES, GL_LINE_LOOP, GL_LINE_STRIP | 2 |
triangles | GL_TRIANGLES, GL_TRIANGLE_FAN, GL_TRIANGLE_STRIP | 3 |
lines_adjacency | GL_LINES_ADJACENCY,GL_LINE_STRIP_ADJACENCY | 4 |
triangles_adjacency | GL_TRIANGLES_ADJACENCY,GL_TRIANGLE_STRIP_ADJACENCY | 6 |
同时从几何着色器输出模式,则有3种:
- points
- line_strip
- triangle_strip
这3种模式基本包含了所有绘图类型,例如triangle_strip就包含了triangle这种特例。max_vertices表示从几何着色器最多输出顶点数目,如果超过设定的这个数目,OpenGL不会输出多余的顶点。
几何着色器中EmitVertex表示输出一个顶点,EndPrimitive表示结束一个图元的输出,这是一对命令