OpenGL|OpenGL 渲染管线流程解析

说到渲染流程,我们可以用一张图,清楚的看到渲染的一系列流程。废话不说,看图(图片取自Tobesky的一篇文章)
OpenGL|OpenGL 渲染管线流程解析
文章图片
渲染管线流程
这样图非常重要,处理任何图形渲染,都需要依据这张图的流程。下面我们来细细说明这张图表达的意思。 【OpenGL|OpenGL 渲染管线流程解析】
客户端/ 服务端 Client(客户端)/ Server(服务端。在我们日常开发中手机端称为客户端,后台称为服务端。在这里是要区分开来的。图中虚线分为上下两部分,上半部分是客户端,下半部分为服务端。
客户端是存储在CPU存储器中的,并且在应用程序中执行,或者在主系统内存的驱动程序中执行(我们写的代码,OpenGL 提供的API就是在客户端执行)
服务端驱动程序会将渲染命令和数组组合起来,发送给服务器执行。(在一台典型的个人计算机上,服务器就是实际上就是图形加速卡上的硬件和内存)
着色器 顶点着色器(Vertex Shader)和 Fragment Shader(片元着色器)和图元装配(primitive Assembly)

  • 着色器是使用GLSL编写的程序
  • 顶点着色器计算顶点数据在交由图元装配对每个片段进行光栅化,最后片元着色器会输出我们将屏幕上看到的最终颜色值。
3种向OpenGL 着色器传递渲染数据的方法 1.属性
2.uniform 值
3.纹理
属性
  • 每一个顶点都要作改变的数据元素
  • 属性值可以是浮点数、整数、布尔数据
  • 属性还可以是:纹理坐标、颜色值、关照计算表面法线
  • 属性只提供给顶点着色器使用,对于片元着色器木有太大意义
  • 属性可以通过顶点着色器,间接传递给片元着色器
Uniform值
  • uniform变量可以无数次地使用
  • uniform 变量每个批次改变一次,而不是每个顶点改变一次
  • uniform变量最常见的应用是在顶点渲染中设置变换矩阵
  • 与属性相同点:可以是浮点值、整数、布尔值
  • 与属性不同点:顶点着色器和片元着色器都可以使用uniform变量。uniform 变量还可以是标量类型、矢量类型、uniform矩阵
纹理
  • 在顶点着色器、片段着色器中都可以对纹理数据进行采样和筛选
  • 典型的应用场景:片元着色器对一个纹理值进行采样,然后在一个三角形表面应用渲染纹理数据
  • 纹理数据,不仅仅表现在图形,很多图形文件格式都是以无符号字节(每个颜色通道8位)形式对颜色分量进行存储的
输出 在图表中第四种数据类型是输出(out);输出数据是作为一个阶段着色器的输出定义的,二后续阶段的着色器则作为输入定义。
  • 输出数据可以简单的从一个阶段传递到下一个阶段,也可以用不同的方式插入。
  • 客户端的代码接触不到,这些内部变量OpenGL开发暂时接触不到。

    推荐阅读