OpenGL-ES 学习(12) ---- GPU 系统结构

图形流水线

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

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

顶点着色器:顶点着色器的输出称为可变变量(Varying),顶点着色器还可以实现矩阵变换位置、计算照明公式来生成逐顶点颜色,生成或者变换纹理坐标等基于顶点的操作

图元装配:图元是指三角形,线段,或者点等几何对象,图元的每个顶点被发送到顶点着色器的不同拷贝,在图元装配期间,这些顶点被装配成图元;每个图元,还需要确认图元是否位于视锥体内,如果没有完全位于,就需要进行裁剪,或者直接剔除,裁剪和剔除之后,顶点位置就被转换为屏幕坐标,传递给管线的下一阶段进行光栅化

光栅化:光栅化是将一组图元转换为一组二维片段的过程,输出屏幕坐标,颜色,纹理坐标等然后,这些片段由片段着色器处理,这些二维片段代表着可以在屏幕上绘制的像素

片段着色器:片段着色器输出一个颜色值

渲染流程如下:

  • 首先图形应用输入顶点的值,再将这些顶点构成成基本图元(三角形)
  • 三角形的每个顶点经过 VertexShader 处理,被变换到 Clip space中,然后再做透视投影被投影到 View space 中,
  • 经过视锥裁剪被背面剔除之后,剩下的三角形都被 Tiler 处理,得到每个 Tiler 上的 polygon list(polygon:多边形),
  • 然后就是光栅化(Rasterzation)、early-ZFPKFragmentShaderz testblend 等一系列流程,执行完成之后就可以得到一个有用的 pixel,并且被写入 FrameBuffer

GPU内部构成

Job Manager
  • CPU 提交的绘制命令,会首先由 JobManager 进一步拆分,将 VertexShaderFragmentShader 分别提交到 Non-FragmentSlotFragmentSlot 这两个队列中(Vulkan 中有直接获取队列的操作),绘制命令中也有可能包含 Compute Shader,同样
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值