早期opengl使用固定渲染管线(也称为立即渲染模式),这种渲染方式的有点是简单易用,opengl库隐藏了很多功能。此消彼长,在灵活性方面大打折扣,而且效率不高,所以从3.1版本开始,opengl库中已经剔除了固定渲染管线,取而代之的是可编程渲染管线。所以是基于自己在学习现代opengl过程中的理解。
首先,渲染管线接收顶点数据并传给顶点着色器,顶点着色器主要进行坐标的转换,按我的理解就是主要目的是确定位置。顶点着色器处理完后进入图元装配,opengl定义了好几种图元类型,例如点,三角形,线等,按我的理解这个阶段是为了确定形状。当位置形状确定后就会进入几何着色器阶段,几何着色器会形成新的形状。在进入光栅化阶段之前,我们只是知道了位置和形状,但是并不知道我们的图元在屏幕上处于什么位置,哪些像素包含我们的图元,所以当进入光栅化阶段,这个阶段把之前处理好的图元映射到屏幕上相应的像素供之后的片段着色器程序使用,在片段着色器阶段,它会计算片段的颜色,也就是屏幕上每一个像素的具体颜色,这里不难看出很多炫丽的特效等都是这个阶段的计算得到的。最后进入测试与混合阶段,这个阶段主要进行深度测试和颜色混合,所谓深度测试就是处理遮挡关系,例如两个图元a和b重叠,必然会有很多片段重叠,深度测试主要确定重叠的这些片段是显示a还是显示b