opengl 课程三离屏

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 顶点着色器

  1. Attributes(属性通道)

顶点数据、投影矩阵、模型矩阵
纹理坐标(映射关系)
2. Uniform(统一批次,只设置一次的)
变换矩阵、
3. Texture(一般不这么传递)

Fsh 片源着色器

  1. 来自vsh顶点着色器
  2. Uniform
  3. Texture 纹理数据

投影

正投影
透视投影

有点意思1
有点意思2