前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >CoreAnimation 渲染流程CoreAnimation 渲染流程

CoreAnimation 渲染流程CoreAnimation 渲染流程

作者头像
用户8893176
发布2021-08-09 13:43:42
1.8K0
发布2021-08-09 13:43:42
举报
文章被收录于专栏:小黑娃Henry

Core Animation 渲染流程

阅读时间3-5分钟

前言

依旧老规矩带着问题来阅读 CoreAnimation 的职责是什么?

流程图

这是苹果官方提供的大量图片中的一张

流程图的解读

整个流程一共有下面几个步骤:

  • Handle Events 这个过程中会先处理交互事件,这个过程中有可能会需要改变页面的布局和界面层次;这个很好理解。
  • Commit Transaction 此时app会通过CPU处理显示内容的前置计算,比如布局计算、图片解码等任务,接下来会进行详细的讲解。之后将计算好的图层进行打包发给 Render Server。 Commit Transaction 这部分中主要进行的是:Layout、Display、Prepare、Commit 等四个具体的操作。
    • Layout 构建视图,计算视图布局
    • Display 绘制视图层(下面提到的图层)

    这里需要注意的是Core Graphics,这个阶段主要是通过它来完成的,但并不是真正的显示,而是得到图元 primitives 数据。这部分是在CPU中完成的,而后续会通过GPU来得到位图(bitmap) 但是有一个例外:drawRect:如果开发者重写了这个方法就会在CPU中将layer通过Core Graphics直接处理成bitmap,就不会在通过GPU来完成bitmap的渲染,这里就涉及到一个概念:离屏渲染

    • Prepare 图片解码和转换
    • Commit 将处理好的图层打包发送给Decode
  • Decode 打包好的图层被传输到 Render Server 之后,首先会进行解码。注意完成解码之后需要等待下一个 RunLoop 才会执行将具体操作绘制(OpenGL/Metal的操作)转发给下个流程Draw Calls。 以上三个步骤都是在CPU中完成的。
  • Draw Calls 解码完成后,Core Animation 会调用下层渲染框架(比如 OpenGL 或者 Metal)的方法进行顶点着色器、图元装配、光栅化、片元着色器、混合等渲染工作,进而调用到 GPU。
  • Render 这一阶段主要由 GPU 进行渲染。
  • Display 显示阶段,需要等 render 结束的下一个 RunLoop 触发显示。

更多和渲染有关的可以查看: iOS 渲染原理解析

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/7/8 上午,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Core Animation 渲染流程
    • 前言
      • 流程图
      • 流程图的解读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档