GPU流水线
主要分为两个阶段:几何阶段和光栅化阶段
几何阶段
顶点着色器 ——> 曲面细分着色器(可选)----->几何着色器(可选)----->裁剪——>屏幕映射
顶点着色器
流水线的第一个阶段,输入来自于CPU,处理的基本单位为单个顶点,输入的每一个顶点都会调用一次顶点着色器。
主要工做是:坐标变换(好比改变顶点位置模拟水面、布料等)和逐顶点光照,并输出后续阶段须要的数据(常见的输出路径是经光栅化后交给片元着色器处理)。
曲面着色器
一个可选的着色器,用于细分图元。
几何着色器
用于执行逐图元操做,或者用于产生更多的图元
裁剪
将不在摄像机视野的顶点裁剪掉,并剔除某些三角图元的面片(主要处理一部分在视野内另外一部分在视野外的图元。
屏幕映射
将每一个图元的x和y坐标转换到屏幕坐标系(二维坐标系,与屏幕分辨率有很大关系)
光栅化阶段
三角形设置 ——> 三角形遍历 -----> 片元着色器(可选)——>逐片元操做——>屏幕图像
三角形设置
该阶段计算光栅化一个三角形网格须要的信息。具体来讲,上个阶段输出过来的都是三角网格的顶点,即三角网格每条边的两个端点。但若是要获得整个三角网格对像素的覆盖状况,咱们就必须计算每条边上的像素坐标。为了可以计算边界像素的坐标信息,咱们就须要获得三角形边界的表示方法。这就是一个计算三角网格表示数据的过程。
三角形遍历
该阶段会检查每一个像素是否被一个三角网格覆盖,若是被覆盖就会生成一个片元。该阶段会根据上一阶段的计算结果判断一个三角网格覆盖了哪些像素,并用三角网格的三个顶点的信息对覆盖区域的像素进行插值。这一阶段会输出一个片元序列。
片元着色器
顾名思义,给每一个像素着色。该阶段可由开发者编程实现一些渲染效果,并完成不少重要的渲染技术,如纹理采样等。片元着色器仅能影响单个片元。
逐片元操做
在DriectX中又称为输出合并阶段。
主要任务:1)决定每一个片元的可见性。如进行深度测试、模板测试。
2)若是一个片元经过了全部的测试,就须要把这个片元的颜色值和已经存储在颜色缓冲区中的颜色进行合并,或者说混合。