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。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。