图形管线就是将给定的数据在显卡渲染成图像需要经过的一系列操作。
从上图可以看出,输入是顶点数据,而输出是Framebuffer。
- input assembler:从vertex buffer/ index buffer收集顶点信息
- vertex shader:将顶点的位置由模型空间转换到屏幕空间
- Tessellation shader:可让您根据某些规则来细分几何形状,以提高网格质量。这通常用于使像砖墙这样的表面和楼梯在附近时看起来不那么平坦。
- geometry shader:类似于Tessellation shader。丢失/细分为更多的原始图像数据。但是,它在当今的应用程序中并不多,因为除了英特尔的集成GPU之外,大多数图形卡上的性能都不好。
- rasterization:将原始的图像离散为片段。通常,由于深度缓冲,这里也会抛弃其他原始碎片后面的片段
- fragment shader:为每个最终要渲染的像素片段进行着色,使用来自顶点着色器的值进行插值计算。
- color blending:用来混合映射到同一个像素的不同片段。 这些阶段在上图中,绿色的部分表示工作流程是预定义的,只能调节一些参数。而橙色的部分则是可以用户自己编写代码实现的。
设置以及编写好这些阶段的操作,就是一个图形管线。在vulkan当中图形管线是几乎不可修改,因此对于不同的组合需要创建大量的图形管线。但是有点在于图形管线中的所有操作都是提前知道的,也就更好进行优化了。