目录
图形流水线
一个图形应用是以流水线的方式运行,如下图所示:

CPU 负责向 GPU 提交 Render Operation,包括设置管线状态,准备渲染数据,提交绘制命令(也就是draw call)
GPU 负责对渲染数据进行计算,对于不同的 Render pass,可以以流水线的方式并行执行
OpenGL-ES 的渲染管线流程如下图所示:

顶点着色器:顶点着色器的输出称为可变变量(Varying),顶点着色器还可以实现矩阵变换位置、计算照明公式来生成逐顶点颜色,生成或者变换纹理坐标等基于顶点的操作
图元装配:图元是指三角形,线段,或者点等几何对象,图元的每个顶点被发送到顶点着色器的不同拷贝,在图元装配期间,这些顶点被装配成图元;每个图元,还需要确认图元是否位于视锥体内,如果没有完全位于,就需要进行裁剪,或者直接剔除,裁剪和剔除之后,顶点位置就被转换为屏幕坐标,传递给管线的下一阶段进行光栅化
光栅化:光栅化是将一组图元转换为一组二维片段的过程,输出屏幕坐标,颜色,纹理坐标等然后,这些片段由片段着色器处理,这些二维片段代表着可以在屏幕上绘制的像素
片段着色器:片段着色器输出一个颜色值
渲染流程如下:
- 首先图形应用输入顶点的值,再将这些顶点构成成基本图元(三角形)
- 三角形的每个顶点经过
VertexShader处理,被变换到Clip space中,然后再做透视投影被投影到View space中, - 经过视锥裁剪被背面剔除之后,剩下的三角形都被
Tiler处理,得到每个Tiler上的polygon list(polygon:多边形), - 然后就是光栅化(
Rasterzation)、early-Z、FPK、FragmentShader、z test、blend等一系列流程,执行完成之后就可以得到一个有用的 pixel,并且被写入FrameBuffer
GPU内部构成
Job Manager
CPU提交的绘制命令,会首先由JobManager进一步拆分,将VertexShader和FragmentShader分别提交到Non-FragmentSlot和FragmentSlot这两个队列中(Vulkan中有直接获取队列的操作),绘制命令中也有可能包含Compute Shader,同样

最低0.47元/天 解锁文章
2万+

被折叠的 条评论
为什么被折叠?



