基本流程
画一个蓝色三角形的过程:
-
顶点着色器:拿到顶点数据,确认顶点位置。
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。