美文网首页
iOS之图像显示

iOS之图像显示

作者: 賣女孩的小火柴 | 来源:发表于2020-06-01 09:24 被阅读0次

图像显示原理

图像显示原理

    如上图所示:CPU计算视图frame,图片解码,绘制纹理交给GPU,GPU进行纹理混合,顶点变换,渲染到帧缓冲区,随后视频控制器会按照 VSync信号逐行读取帧缓冲区的数据,经过可能的数模转换传递给显示器显示。

画面撕裂现象

    在最简单的情况下,帧缓冲区只有一个,这时帧缓冲区的读取和刷新都都会有比较大的效率问题。为了解决效率问题,显示系统通常会引入两个缓冲区,即双缓冲机制。在这种情况下,GPU会预先渲染好一帧放入一个缓冲区内,让视频控制器读取,当下一帧渲染好后,GPU 会直接把视频控制器的指针指向第二个缓冲器。如此一来效率会有很大的提升。    

    双缓冲虽然能解决效率问题,但会引入一个新的问题。当视频控制器还未读取完成时,即屏幕内容刚显示一半时,GPU 将新的一帧内容提交到帧缓冲区并把两个缓冲区进行交换后,视频控制器就会把新的一帧数据的下半段显示到屏幕上,造成画面撕裂现象,为了解决这个问题,GPU 通常有一个机制叫做垂直同步( V-Sync),当开启垂直同步后,GPU会等待显示器的 VSync 信号发出后,才进行新的一帧渲染和缓冲区更新。这样能解决画面撕裂现象,也增加了画面流畅度,但需要消费更多的计算资源,也会带来部分延迟。目前主流的移动设备会始终使用双缓存,并开启垂直同步。

CPU和GPU各自承担的工作

    CPU:        

        layout(UI布局和文字的计算)

        drawRect(绘制的过程)

        Prepare(图像的解码)

        Commit(提交位图)

    GPU:

        图层的合成

        纹理渲染

UI卡顿、掉帧

    一般来说,页面的流畅性是60FPS,代表着每秒有六十帧的画面更新,所谓的卡顿或者掉帧是因为刷新帧率小于16.7ms(人眼的接受帧率为1秒60帧位图是不会出现卡顿现象),也就是说一秒内要完成至少60个位图绘制渲染.当CPU计算或者绘制时间较长,导致GPU渲染加上CPU计算时间超过16.7ms就会出现卡顿、掉帧现象。

卡顿图示

大体有三种原因会导致卡顿:

    1.UI渲染需要时间较长,无法按时提交结果

    2.一些需要密集计算的处理放在了主线程中执行,导致主线程被阻塞,无法渲染UI界面

    3.网络请求由于网络状态的问题响应较慢,UI层由于没有模型返回无法渲染

相关文章

  • iOS图像显示原理

    iOS图像显示原理 iOS图像显示原理

  • iOS之图像显示

    图像显示原理 如上图所示:CPU计算视图frame,图片解码,绘制纹理交给GPU,GPU进行纹理混合,顶点变换,渲...

  • iOS 显示图像

    显示图像,如下代码: 希望能帮助到你!

  • iOS图像显示原理

    析构图显示: 图像显示各组件分工: ~ CPU:计算视图frame,图片解码,绘制纹理交给GPU。~ GPU:纹理...

  • iOS图像显示原理

    该文章是在看到的一篇公众号文章,拿过来总结分享一下 1、图像显示各组件分工: CPU:计算视图frame,图片解码...

  • IOS 图像显示原理

    详解 CPU GPU 这两个硬件实际上是是由总线连接起来的 CPU 中输出的往往是一个位图(像素数组) 在经由总键...

  • iOS图像显示流程

    首先CPU处理布局,文本之类的计算,然后drawrect绘制需要显示的内容,提交给calyer,通过解码位图,然后...

  • 2018 iOS面试题大全---全方面剖析面试

    1、iOS(面试)UI相关:事件传递,图像显示,性能优化,离屏渲染2、iOS(面试)--Objective_C语言...

  • openCV

    Opencv2图像裁剪(子图像提取) opencv之读取图像 #######opencv读取图像的灰度值并显示出来...

  • 2019 iOS面试题大全---全方面剖析面试(上)

    2018 iOS面试题---UI相关:事件传递,图像显示,性能优化,离屏渲染 2018 iOS面试题---Obje...

网友评论

      本文标题:iOS之图像显示

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