OpenGL 渲染流程图解析

OpenGL 渲染使用客户端<——>服务端的形式实现,客户端是我们编写的代码,服务端是计算机图形硬件厂商所提供的OpenGL实现。
OpenGL 渲染流程图解析
由上图可见,渲染管线分为上下两个部分,上面一部分是客户端,下面一部分是服务端。

  • Client 客户端
    客户端是存储在 CPU 存储器中的,并且在应用程序中执行,或者在主系统内存的程序中执行。会将渲染命令和数据组合起来发送给服务器执行。

  • Server 服务端
    实际上就是OpenGL中直接操作 GPU 绘制图形的部分。Client 和 Server 是独立异步执行的,分属不同的软件块或硬件块。

  • 通道
    OpenGL API 向 GPU 传递数据有三个通道:

    • Attributes 属性
    • Uniforms
    • Texture Data 纹理数据。
  • attribute 属性
    传递的是不断发生改变的数据,只能传递到顶点着色器,不能直接传递到片元着色器,可以通过 GLSL 代码间接传递。
    传递的数据包括:

    • 颜色数据
    • 顶点数据
    • 纹理坐标
    • 光照法线
  • uniform 值
    传递的是统一的数据,如旋转矩阵、变换矩阵等,可以直接传递到片元着色器和顶点着色器。
    视频解码渲染使用到的颜色空间是 YUV 颜色值,需要将 YUV 乘以转换矩阵转换成 RGBA。
    顶点着色器的常量数据不能被着色器修改,一般用于对统一组顶点组成的单个 3D 物体中所有顶点都相同的变量,如当前光源的位置。

  • Texture Data 纹理数据
    主要应用场景

    • 滤镜:对图片本身进行处理,改变图片在读取时的颜色值。
    • 渲染一个图形:正方体:线框填充、颜色填充、纹理填充(多张)
  • Position Vertex 顶点位置
    顶点着色器执行顶点的变换结果

    • 颜色
    • 法线
    • 纹理坐标
  • Primitive Assembly 光栅化
    光栅化不能被操作,我们只能操作顶点着色器和片元着色器。

  • Outs 输出
    将数据从一个阶段传递到下一个阶段,开发者无法参与干预其过程

  • Render 渲染
    渲染图形