iOS:屏幕显示图像原理

最近无意中翻到一篇文章,讲述的是屏幕图像显示原理,以前我并不太关心这方面的理论,认为这仅仅是关乎于硬件的层面,对于我这种软件开发方面用处并不大。百无聊赖之下看了此篇文章后,收获不小。在这里为了温故而知新,浅谈一下我认为对自己比较重要的知识点。
屏幕显示图像的原理:从过去的CRT到现在的液晶显示器,成像的原理是一样的。


image.png

(请原谅我盗个图,嘿嘿...)
看上图一目了然的能够大致看出成像的原理。成像的核心就是GPU为主导的,首先CPU计算好屏幕要显示的内容,将它提交给GPU,GPU开始渲染后将结果放入到帧缓冲区,随后视频控制器读取帧缓冲区的数据经过转换后传递过显示器显示。
画面撕裂的现象:但是GPU的渲染完成一个新的图像帧时,此时屏幕显示器只完成了上一帧的部分图像时,此时GPU刷新帧缓冲区时,这时就会出现画面撕裂的现象了。为了解决这个问题,GPU 通常有一个机制叫做垂直同步(简写也是 V-Sync),当开启垂直同步后,GPU 会等待显示器的 VSync 信号发出后,才进行新的一帧渲染和缓冲区更新。这样能解决画面撕裂现象,也增加了画面流畅度,但需要消费更多的计算资源,也会带来部分延迟。这里我困惑了,帧缓冲区难道只能放一帧的图像?为此我查了一下帧缓冲区的定义:帧缓冲存储器(Frame Buffer):简称帧缓存或[显存],它是屏幕所显示画面的一个直接映象,又称为位映射图(Bit Map)或光栅。帧缓存的每一[存储单元]对应屏幕上的一个像素,整个帧缓存对应一帧图像。
卡顿产生的原因:看图说话(再盗一下图)


image.png

此图更为形象的反映了屏幕成像的原理流程是怎么样的。CPU计算显示内容,例如视图创建,布局计算、图片解码、文本绘制等。随后 CPU 会将计算好的内容提交到 GPU进行合成、渲染。随后 GPU 会把渲染结果提交到帧缓冲区去,等待VSync 信号到来时显示到屏幕上。如果此时下一个VSync 信号到来时,CPU或GPU都没有完成相应的工作时,则那一帧将会丢失,则就是我们看到屏幕卡顿的原因。
所以说,卡顿造成的原因通常是CPU和GPU导致的掉帧引起的,那么我们在编码的同时就会从这两方面去思考问题所在。
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 以下心得都是个人通过学习后实践验证,或者直接从实践中总结而来,视野有限难免偏颇,还请大家多多交流~ 本文大约230...
    培训经理陈维磊阅读 492评论 1 4
  • 岁月流逝,不知不觉已到了孩子们谈婚论嫁的年龄。今年家庭话题最多的是儿子找对象的事。又碰巧同学的儿子和朋友的...
    被褐怀玉ly阅读 480评论 0 0
  • 装修成为今年我们二人世界里的一件大事,有几分期待又有几分畏惧,期待的是一起打造家的那种幸福感和兴奋之情,畏惧的是无...
    猪猪头看世界阅读 248评论 0 0
  • 早晨起床时突然头晕的厉害,而且伴随着阵阵恶心……好吧,身体要罢工了,请了半天假,躺在床上一动不动,休息了两个小时,...
    行走在路上呢阅读 267评论 0 0
  • 李在南理,我来了,莫名冲动。 志大才疏,你收了,有点激动。 刚柔并济,我服了,不敢乱动。 好义急公,你教了,心随你...
    凡奇圣雪阅读 542评论 0 1

友情链接更多精彩内容