iOS 离屏渲染分析

本文详细介绍了iOS中离屏渲染的概念、原因和常见触发因素,包括Masking、UIVisualEffectView、Rasterization、Group Opacity、Shadow和圆角等。离屏渲染虽然用于实现特殊效果和提高效率,但也可能导致性能下降。文中提供了测试和避免离屏渲染的方法,旨在帮助开发者优化iOS应用的性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

On-Screen Rendering:当前屏幕渲染,CPU、GPU 不停地将内容渲染完成放入frame buffer帧缓冲区中,显示屏幕从 frame buffer中获取内容显示。

Off-Screen Rendering:离屏渲染,先创建离屏渲染帧缓冲区offscreen frame buffer,然后逐一将内容渲染放入其中,完成后对离屏渲染缓冲区做阴影叠加、裁剪等操作,最后将结果拷贝或切换到帧缓冲区frame buffer中,显示屏幕从 frame buffer中获取内容显示。

为什么需要

那么为什么需要离屏渲染帧缓冲区offscreen frame buffer呢?我们先来了解下“画家算法”。

画家算法,也叫作优先填充,它是三维计算机图形学中处理可见性问题的一种解决方法(三维场景投影到二维平面)。如下图,画家算法首先将场景中的多边形根据深度进行排序,然后按照由远到近的顺序进行描绘,这种方法通常会将不可见的部分覆盖,这样就可以解决可见性问题。

”画家算法“,每一层由远到近依次输出到画布

对于有前后依赖的图层(如阴影叠加、裁剪等),通过由远到近的图层叠加算法是无法实现的,我们需要先申请一个临时缓冲区,所有图层按照画家算法,由远到近在临时缓冲区渲染,渲染完成后,再对这个临时缓冲区做最后的全局操作(如阴影叠加、裁剪等),最后再把临时缓冲区拷贝或切换到当前的缓冲区上,交给显示器显示。

总结一下,使用离屏渲染大概是因为以下原因:

  1. 需要实现特殊的效果,比如说全局叠加、裁剪等等,需要用额外的帧缓冲区offscreen frame buffer保存中间状态。

  2. 出于效率目的,针对不会经常变更的图层,可以缓存到offscreen frame buffer,供下次刷新使用。

什么时候出现

Masking

最常见的情形就是使用了Masking</

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值