离屏渲染
双缓存+垂直同步信号
- 离屏渲染
- 常用的渲染方式是读取帧缓冲区(Frame Buffer)渲染好的数据然后显示在屏幕上,离屏渲染(OffScreen Buffer)是将多个图层的数据依次渲染完成之后,放入帧缓冲区然后统一在屏幕上显示


离屏渲染的逻辑是由于计算机按层渲染,渲染后就会将相应的缓存清空,但是由于需要对画面进行圆角等渲染,因此苹果推出离屏渲染是将每个图层分别渲染并写入缓冲区,最后进行图层的渲染叠加,避免了不必要的开销。
补充 处理图像圆角的几种方案
方案1
_imageView.clipsToBounds=YES;
_imageView.layer.cornerRadius=4.0;
方案2
UIGraphicsBeginImageContextWithOptions(self.size,NO,scale);
[[UIBezierPath bezierPathWithRoundedRect:imageFrame cornerRadius:cornerRadius] addClip];
[self drawInRect:imageFrame];
image= UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
方案3
增加圆角图片进行覆盖
离屏渲染的限制
- 离屏渲染的空间有限制,限制为屏幕大小的2.5倍
- 渲染由于是分层渲染,导致性能问题
- 掉帧
渲染架构图分析

根据上图可以得到渲染流程如下 首先客户端Client代表上层封装的Api Server服务端代表底层实现架构
- 设置顶点数据以及参数
- 在顶点着色器中运算
- 进入细分的着色器
- 设置图元,并构成点线以及三角形
- 裁剪
- 光栅化
- 偏远着色器填充颜色
- 渲染 (参考 www.jianshu.com/p/dc65d6e7e…
OpenGL数据传递的三种方式
Attributes 属性传递,只能传递给顶点着色器,其他不可以 Uniforms 可以传入顶点着色器和片元着色器 Texture Data 数据纹理对象也可传递到顶点着色器和片元着色器