理解OpenGL 渲染流程图

OpenGL渲染使用客户端client<——>服务端server的形式实现,客户端是我们编写的代码,服务端是计算机图形硬件厂商所提供的OpenGL实现。在移动端OpenGL ES框架相当于Client去发起图像处理请求,GPU相当于Server负责处理图形操作。


  1. client
    application中的代码和OpenGL API是存储在CPU中的,属于client,由应用程序执行,在主系统内存的驱动程序中执行,驱动程序将数据传递给server。

  2. server
    OpenGL中直接操作GPU绘制图形的部分是server,client与server是独立异步执行的,他们分属于不同的软件块或硬件块。在server端,顶点着色器处理client传递过来的顶点数据,然后将图形进行光栅化,再由片元着色器填充颜色,完成图形的渲染。

  3. 通道:Attributes、Uniforms、Texture Data
    OpenGL API向GPU传递数据有三个通道,分别是Attributes属性、Uniforms和Texture Data纹理数据

  • Attributes属性:传入的数据包括顶点座标、纹理座标、颜色值、光照法线等不断改变的数据
    属性总是以4维向量的形式进行内部存储,顶点座标是(x,y,z),占3个分量;属性会从本地client内存中复制存储在图形硬件中的一个缓冲区上,这些属性只提供给顶点着色器使用。
  • Uniforms:Uniforms变量传递的是统一的数据,如旋转矩阵、变换矩阵等,最常见的应用是在顶点渲染中设置变换矩阵,顶点着色器和片元着色器都可以使用uniforms变量。uniforms变量还可以是标量类型、矢量类型、uniform矩阵。
  • Texture Data纹理数据:对图片的处理,渲染图形时的线框填充、颜色填充、纹理填充、像素填充等,在顶点着色器、片段着色器中都可以对纹理数据进行采样和筛选。
    典型的应用场景:片段着色器对一个纹理值进行采样,然后在一个三角形表面应用渲染纹理数据。
  1. 流程
  • ins输入:将数据拷贝到着色器中
  • Vertex Shader顶点着色器:处理传入的顶点数据,包括顶点位置、顶点颜色、光照等,每个顶点都会执行一次
  • Position Vertex顶点位置
  • Primitive Assembly图元装配:将顶点链接起来组成点、线、面(三角形)三种不同的图元,然后对超出屏幕的部分进行裁剪,这是对图形进行裁剪、透视分割、视口变换、光栅化等操作
  • Fragment Shader片元着色器:计算每个像素点的颜色并填充
  • outs输出:将数据从一个阶段传递到下一个阶段
  • Render渲染:渲染图形

参考链接:
【OpenGL】OpenGL渲染流程详解

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章