OpenGL中,GPU屏幕渲染有两种方式:On-Screen Rendering和Off-Screen Rendering。
介绍
On-Screen Rendering(现屏渲染),指的是GPU的渲染操作是在当前用于显示的屏幕缓冲区中进行。
Off-Screen Rendering(离屏渲染),指的是GPU在当前屏幕缓冲区以外新开辟一个缓冲区进行渲染操作。
代价
离屏渲染的代价主要包括两方面内容:
- 创建新的缓冲区;
- 上下文的切换。
离屏渲染的整个过程,需要多次切换上下文环境:先是从当前屏切换到离屏;等到离屏渲染结束并显示到屏幕后,又需要切换到当前屏幕。而上下文环境的切换是要付出很大代价的。
原理
当使用圆角,阴影,遮罩的时候,图层属性的混合体被不能直接在屏幕中绘制,需要屏幕外渲染,当主屏绘制完成后,再将离屏的内容转移至主屏上。
触发方式
离屏渲染的触发方式:
- shouldRasterize(光栅化)
- masks(遮罩)
- shadows(阴影)
- edge antialiasing(抗锯齿)
- group opacity(不透明)
避免方式
可以通过直接生成圆角图,而不是设置CALayer的属性:
1 | UIGraphicsBeginImageContextWithOptions(sizeToFit, NO, UIScreen.mainScreen.scale); |