美文网首页
Core Animation在渲染中的角色

Core Animation在渲染中的角色

作者: K哥的贼船 | 来源:发表于2020-07-05 21:46 被阅读0次

    CoreGraphics、Core Animation和CoreImage并不是通过OpenGL ES/Metal进行封装的,但是他们都是通过OpenGL ES/Metal去驱动GPU渲染的,Core Animation本质上可以理解为一个复合引擎,主要职责包含:渲染、构建和实现动画。

    我们都知道layer是UIView的属性之一,负责渲染和动画,提供可视化的内容呈现,UIView则是对CALayer部分功能进行封装,同时负责了交互事件的处理。所以他们的区别是:

    • view:
    1. 绘制和动画
    2. 布局和子view的管理
    3. 点击事件的处理
    • layer
      只负责渲染和动画

    不管在屏幕上显示的按钮,图片,文本等控件在layer里都是contents里的位图。

    OpenGL本身跨平台通用性的特点决定了它并不提供窗口载体去显示,苹果的CoreAnimation则提供给它一个layer载体。无论Mac OS的APPKit或者iOS的UIKit,都是通过Core Animation去让OpenGL ES/Metal去驱动GPU,由于手机App和Mac的布局并不一致,所以他们解释了layer是不会迎合任何的布局。

    view和layer都是职责分离的,在APPKit中用户交互是根据键盘、鼠标、触摸板输入响应的,而UIKit是根据手机屏幕触摸响应的,所以交互的职责并不能交给layer来做。

    Core Animation的渲染流水线

    所有的UIButton,UILabel都会来到Core Animation来绘制,然后接收事件处理HandleEvents,对显示内容解码,通过Commit Transaction提交给CPU解码后给Render Server,等待下一个RunLoop来进行绘制回调,这些都是在Core Animation中完成的。之后再将解码的数据交给OpenGL,调度GPU显示渲染流程(通过顶点数据=>顶点着色器=>片元着色器=>等待下一个Runloop=>显示)。

    相关文章

      网友评论

          本文标题:Core Animation在渲染中的角色

          本文链接:https://www.haomeiwen.com/subject/wxdbqktx.html