总体上可以分为三个阶段 A: 应用阶段 B :几何阶段 C:光栅化阶段
一:应用阶段 :起点是cpu,分为:
a:从cpu中提取数据到显存中(硬盘->内存->显存)显存就是显卡的内存,通常RAM加在到显存中后就释放了,但是有时为了计算网格碰撞检测等操作,就不释放掉。数据包括:场景的资源、资源身上的材质、贴图、shader、位置。法线方向。顶点颜色
b:设置渲染状态:就是场景中的网格是如何被渲染的。包括使用了哪些个顶点着色器,片源着色器等。
c:向gpu发送drawcall指令,一个drawcall指向的一个需要被渲染的图片列表。
二:几何阶段(属于GPU流水线)
包含:顶点着色器-->曲面细分着色器-->几何着色器--->裁剪---->屏幕映射
顶点着色器(可编程):顾名思义 只能针对于顶点自身的空间变换、颜色等,无法得到相关联的顶点(gpu可以并行化处理,so 处理很快)(主要工作:顶点变换,顶点光照)
曲面细分着色器(可选):顾名思义+1,用于细分图元
几何着色器(可选):,可以增加图元,可以逐图元着色。
裁剪(可配置):删除掉摄像机看不到的 地方。
屏幕映射(不可编程不可配置):把所有 图元的 空间坐标----->屏幕坐标
三:光栅化阶段:三角形设置-->三角形遍历--->片元着色器------>逐片元操作------->屏幕图像
该阶段接收的是屏幕顶点坐标
三角形设置:一个三角形内包含了哪些像素
三角形遍历:根据三个顶点 的信息 对三角形内的各个像素进行差值--->输出为一个片元(片元只是包含信息,并没有到屏幕上)
片元着色器 (可编程): 逐片元着色
逐片元操作(配置性很高但不可编程):修改颜色。深度缓冲。进行混合
具体来说 就是每一个测试每一个片元 是否可见 ,该阶段主要为:模板测试 和深度测试。不通过则不要了