您的位置:首页 > 其它

关于view渲染的深入了解

2015-07-20 12:05 232 查看
最近在objc上看到的关于底层渲染view的一些知识,下面可以给大家分享下。

首先是图形堆栈,what is 图形堆栈,意思就是说当你的像素映射到屏幕上的时候,后台做了很多的处理,因为像素是由红,绿,蓝组成,那么没一个颜色单元会根据指定的颜色显示到一个像素上面。such as 一个iPhone5 上面的像素有很多,mac retina上面的像素就更多了,图形堆栈就类似一个像素,当我们滚动屏幕或者使用其他操作让屏幕刷新的时候,那么屏幕就会以每秒60帧的速度来刷新这个屏幕,也就是每个图形堆栈同时工作。这样的工作量非常之大~

下面这个图是一个view渲染软件的堆栈

大家会看到在display的上一层是CPU,GPU是不同于CPU的一种处理器。

,GPU 是一个专门为图形高迸发计算而量身定做的处理单元。这也是为什么它能同时更新所有的像素,并呈现到显示器上。它迸发的本性让它能高效的将不同纹理合成起来。我们将有一小块内容来更详细的讨论图形合成。关键的是,GPU 是非常专业的,因此在某些工作上非常高效。比如,GPU 非常快,并且比 CPU 使用更少的电来完成工作。通常 CPU 都有一个普遍的目的,它可以做很多不同的事情,但是合成图像在 CPU 上却显得比较慢。
GPU Driver 是直接和 GPU 交流的代码块。不同的GPU是不同的性能怪兽,但是驱动使他们在下一个层级上显示的更为统一,典型的下一层级有 OpenGL/OpenGL ES.

OpenGL(Open Graphics Library) 是一个提供了 2D 和 3D 图形渲染的 API。GPU 是一块非常特殊的硬件,OpenGL 和 GPU 密切的工作以提高GPU的能力,并实现硬件加速渲染。对大多数人来说,OpenGL 看起来非常底层,但是当它在1992年第一次发布的时候(20多年前的事了)是第一个和图形硬件(GPU)交流的标准化方式,这是一个重大的飞跃,程序员不再需要为每个GPU重写他们的应用了。
OpenGL 之上扩展出很多东西。在 iOS 上,几乎所有的东西都是通过 Core Animation 绘制出来,然而在 OS X 上,绕过 Core Animation 直接使用 Core Graphics 绘制的情况并不少见。对于一些专门的应用,尤其是游戏,程序可能直接和 OpenGL/OpenGL ES 交流。事情变得使人更加困惑,因为 Core Animation 使用 Core Graphics 来做一些渲染。像 AVFoundation,Core
Image 框架,和其他一些混合的入口。
要记住一件事情,GPU 是一个非常强大的图形硬件,并且在显示像素方面起着核心作用。它连接到 CPU。从硬件上讲两者之间存在某种类型的总线,并且有像 OpenGL,Core Animation 和 Core Graphics 这样的框架来在
GPU 和 CPU 之间精心安排数据的传输。为了将像素显示到屏幕上,一些处理将在 CPU 上进行。然后数据将会传送到 GPU,这也需要做一些相应的操作,最终像素显示到屏幕上。
这个过程的每一部分都有各自的挑战,并且许多时候需要做出折中的选择
未完待续。。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: