UI图像显示原理

686 阅读2分钟
      之前一只在准备面试题,今天就对这块做个简单的总结,如果你在面试中被问到相关 的知识,都可以吹一波哈。

     其实CPU和GPU都和总线连接。CPU拿到的是位图,会在适当的时机通过总线交给GPU,GPU拿到位图后会做响应的图层渲染,然后把结果放在贞缓冲区(Frame Buffer)中,再由视图控制器根据VSync信号在适应的时机内在贞缓冲区内提取响应显示的内容。最终显示在手机的屏幕上。


接下来看一下CPU和GPU都做了哪些事。
首先我们创建一个UIView视图后,它的显示部分是由CALayer来负责的。而CALater上的一个属性contents就是我们要最终绘制在屏幕上的位图。比如我们创建的一个UILable,文字是Hello world ,那么contents里边存放的就是一个存有Hello world 的位图。然后系统会在合适的时机回掉给我们一个drawRect:的方法。然后我们就可以去绘制一些自定义的一些内容。绘制好的内容会经由Core Animation 这个框架来交给OpenGL(ES)渲染管线,还进行一些绘制,比如纹理的合成等,最终渲染到我们的屏幕上。


在接下来看下CPU和GPU 的工作承担
CPU工作。主要负责视图的布局Layout(ui的布局和文本的计算,其实就是我们平常设计一个label的frame已经文字大小设置)Display过程(包括显示或者绘制比如我们的drawRect:方法就发生在这个过程中)之后呢做一些准备的工作(准备工作比如我们设置了uiiageview的图片,但是这个图片是不能直接显示的,需要图片的编解码),再把位图提交到GPU上面。


GPU工作:GPU的渲染管线其实就是OpenGL的渲染管线。首先会进行顶点着色(就是对位图的处理),然后就是图元装配->光栅化->片段着色->片段处理。这个几步都完成后就会把处理好的像素点放在贞缓冲区中。


大致的流程就这么多,针对后边的GPU渲染流程,详细的渲染流程我会在后边的文章中更新。后续也会写一些关于openGL ES的文章和音视频相关的,希望大家多多关照。如有不对欢迎大家多多留言。