Shader学习02【从CPU到GPU】

渲染流水线的起点在应用阶段,即需要使用CPU,应用阶段大致分为以下三个阶段:

《1》把数据加载到显存中

《2》设置渲染状态

《3》调用DrawCall 

进入正题:

@1:把渲染数据加载到RAM中

所有渲染所需的数据都需要从硬盘(Hard Disk,HDD)中加载到系统内存(Random Access Memory,RAM)中,然后,网格和纹理等数据又被加载到显卡上的存储空间——显存(Video Random Access Memory,VRAM)中,原因是显卡对于显存的访问速度更快,而且大多数显卡对于RAM没有直接的访问权利

       

 

需要注意的是,真是渲染中需要加载到显存中的数据往往比上图所示的要复杂的多,例如,顶点的位置信息,法线方向,纹理坐标等

当把数据加载到显存忠厚,RAM中的数据就可以移除了,但对于一些数据来说,CPU仍然需要访问他们(例如,我们希望CPU可以访问网格数据来进行碰撞检测),那么我们可能就不希望这些数据被移除,因为从硬盘加载到RAM的过程是十分耗时的,在此之后,我们还需要通过CPU来设置渲染状态,从而指导GPU如何进行渲染工作(也就是说,在顶点阶段需要通过CPU来设置渲染状态,从而指导后续GPU的渲染流程)

@2:设置渲染状态

        啥是渲染状态,通俗的解释就是,这些状态定义了场景中的网格是怎样被渲染的,这里的渲染状态包括使用何种顶点着色器(Vertex Shader)/片元着色器(Fragment Shader,光源属性,材质等,如果我们没有更改渲染状态,那么所有的网格都将使用同一种渲染状态,在准备好前面说的种种渲染相关的设置后,CPU就会调用一个渲染命令来通知GPU开始按照渲染状态开始进行渲染,而这个命令,就是DrawCall

@3:调用DrawCall

        DrawCall是一个命令,发起方是CPU,接收方是GPU,这个命令仅仅会指向一个被渲染的图元(primitives)列表 ,而不会再包含任何材质信息——这是应为材质等渲染状态信息被在上个阶段设置完毕,当给定一个DrawCall时,GPU就会根据渲染状态(材质,纹理,着色器等)和所有输入的顶点数据来进行计算(这个顶点数据就来自于图元列表中每一个图元),最终输出到屏幕上显示像素,而这个根据输入的顶点数据和渲染状态渲染成屏幕像素的过程,就是下面要说的GPU流水线 

 

posted @ 2021-05-21 17:32  专杀小三  阅读(237)  评论(0编辑  收藏  举报