CoreAnimation:属于 QuartzCore 框架
QuartzCore:包含 CoreAnimation 实现的各种类
Quartz2D: C语言写的,绘图函数库,是 Core Graphics 的 API
Core Graphics:CPU渲染,
CoreImage: 专门处理图片的
复习 Core Animation 渲染
CPU
-> UIView 触发
-> UILayout 保存需要绘制渲染的内容
-> Application: 提交图层树、动画(Commit Transaction)
-> Render Server: 解析树的状态、生成绘制指令 (Decode, Draw Calls)
GPU
-> 读取帧缓存区
-> 渲染流程5部曲(顶点数据\顶点着色器\图元装配\光栅化\片源着色器)
-> 显示在屏幕(视频控制器->读取缓存信息->数模转换->显示器)
离屏渲染
查看离屏渲染:XCode -> Debug -> Color Off-screen Rendered
离屏渲染大小:屏幕像素的2.5倍
离屏渲染:GPU 需要额外渲染,需要开启离屏缓存区
如有这三个图层:layerA < layerB < layerC
A、无离屏渲染场景:
GPU按照渲染流程,依次渲染各个layer
第一步:layerA -> [FrameBuffer -> 显示器 -> 清空FrameBuffer]
第二步:layerB -> [FrameBuffer -> 显示器 -> 清空FrameBuffer]
第三步:layerC -> [FrameBuffer -> 显示器 -> 清空FrameBuffer]
B、有离屏渲染场景:
假如 layerC 是 layerA 的遮罩,
所以 layerA 就不能执行上面的第一步,需要等待 layerC 的加入才可以计算出最图形
步骤应该如下
layerA -> OffScreenBuffer
-> layerB -> OffScreenBuffer -> 合并计算
-> layerC -> OffScreenBuffer -> 合并计算
-> FrameBuffer -> 显示器 -> 清空FrameBuffer
效率:复用
CGLayer 光栅化 shouldRasterize 建议
- 不被重复使用
- 不是静态图片
- 复用率大于 0.1 秒
- 屏幕像素的2.5倍
油画算法:由远到近
固定管线:GLShaderManager::UserStockShader
GLSL 初见 – 参数的传递
Vsh 顶点着色器
- Attributes(属性通道)
顶点数据、投影矩阵、模型矩阵
纹理坐标(映射关系)
2. Uniform(统一批次,只设置一次的)
变换矩阵、
3. Texture(一般不这么传递)
Fsh 片源着色器
- 来自vsh顶点着色器
- Uniform
- Texture 纹理数据
投影
正投影
透视投影