文章目录
第十章 几何着色器
- 在逻辑上几何着色器位于图元装配和片元着色之前
- 几何着色器接受的输入是一系列顶点组成的完整的图元,并且这些输入全部是数组的形式。通常来说这些输入数据来自于顶点着色器
- 如果激活细分着色器,那么几何着色器的输入将来自细分计算着色器的结果。因为几何着色器的每个请求都负责处理一个完整的图元,所以我们可以访问这个图元的所有顶点,进而实现一些专门的技巧
- 除了增强多顶点访问属性之外,几何着色器还可以控制输出数据的数量。如果输出的总量为0,那么几何体将被自动裁剪,如果输出的顶点数比原始图元要多,那么相当于进行了几何体细化的操作
- 几何着色器还可以产生与输入数据不同的输出图元类型,也就是在管线过程中改变几何体的类型
- 几何着色器可以接收4种特殊的图元类型作为输入
- 几何着色器可以与transform feedback共同使用,将输入的顶点数据流切分为多个子数据流
10.1 创建几何着色器
- 着色器的创建调用glCreateShader(),着色器类型参数传GL_GEOMETRY_SHADER
- 着色器源代码使用glShaderSource()函数传递,然后使用glCompileShader()编译着色器程序
- 一个程序对象可以关联多个几何着色器,当程序完成链接之后,被关联的几何着色器将会链接一个GPU上运行的可执行程序。如果启用已经带有几何着色器的程序对象,那么几何着色器将会对OpenGL产生的每个图元进行处理。这样的图元包括点、线、三角形,或者特殊的邻接图元类型
- 几何着色器位于光栅化和片元着色阶段之前
- 几何着色器的输出可以通过transform feedback的方式捕获,并且我们通