1.2:OpenGL 着色器的渲染流程

基本流程

画一个蓝色三角形的过程:

  • 顶点着色器:拿到顶点数据,确认顶点位置。

    GLfloat vVerts[] = {
            -0.5f,0.0f,0.0f,
            0.5f,0.0f,0.0f,
            0.0f,0.5f,0.0f
        };
    
  • 曲面细分着色器:使几何体更加顺滑之类的操作。

  • 几何着色器:接收来自顶点着色器的一个片元的一组顶点,然后可以对其进行变换,可以输出新的不同类型的片元,也可以增加顶点数

  • 图元设置:设置为以下其中一个:点、线段、连线、环线、三角形等。

  • 剪切:去除视口以外的绘制。

  • 光栅化:如果设置为三角形,此步骤会获得 三角形所有的像素点。

  • 片元着色器:给上面获取到的像素点上色。

  • 渲染上屏:等待同步信号,交换缓冲区。

图片是怎么显示的?

CPU 做图片解码
GPU 做视频解码

  • CPU 解码:一般拿到的是 .jpg 之类的压缩格式,要通过 CPU 解码成 位图 (未经压缩)。

  • GPU 纹理混合:经过上述 着色器渲染流程,将最终数据放到 帧缓冲区。

  • 时钟信号:垂直同步信号 V-Sync (水平同步信号 H-Sync)

  • 渲染上屏

图片的强制解压就是对图片进行重新绘制,得到新的位图,iOS 需要使用 CGBitmapContextCreate。可以看看大佬们是怎么写的,参考 YYImage 和 SDWebImage。

你可能感兴趣的:(1.2:OpenGL 着色器的渲染流程)