计算机渲染图片原理,计算机渲染原理与CoreAnimation

2023-10-18 10:50

本文主要是介绍计算机渲染图片原理,计算机渲染原理与CoreAnimation,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、CPU与GPU

计算机中有三个关键硬件:中央处理器CPU,内存和I/O控制芯片,这三个部件几乎就是计算机的核心了,GPU是后来衍生出的专门用来处理绘图运算的处理器

CPU:现在计算机整个运行系统的计算/控制核心,中央处理器

GPU:绘图运算的专用微处理器,是连接计算机和显示终端的纽带

CPU处理复杂的逻辑运算,虽然现在有多核处理器,可以并发,但实际上并不是真正意义上的并发,而是通过时间片的切换来实现的

而GPU是真正意义上的高并发

二、计算机渲染原理

早期的计算机显示方式是随机扫描显示

显示文件>显示处理器>显示器

通过电子光束随机扫描

而光栅扫描是通过像素点逐行扫描显示到显示器上

ee74466f7d63

image.png

流程如下:

将帧缓冲区里的数据交给视频控制器,视频控制器读取信息进行数模转化,然后进行光栅扫描,显示在显示器上

因为人眼有视觉暂留,一般最低每秒16帧就能让人的视觉感觉连贯

三、屏幕撕裂

ee74466f7d63

image.png

屏幕撕裂如何产生的呢?

屏幕撕裂:当视频控制器拿到帧缓冲区数据显示的时候,这一帧的数据还没显示完,新一帧的数据来了,那么就会开始扫描新一阵的数据,所以就会产生屏幕撕裂

为了解决屏幕撕裂问题,就出现了垂直同步Vsync技术+双缓冲区DoubleBuffering,

垂直同步给帧缓冲区加锁,等待显示完成后交换缓冲区处理下一帧数据,但是如果屏幕刷新完成后,缓冲区的数据并没有计算完成(由于CPU和GPU的速度问题导致拿不到framebuffer),屏幕就会重复渲染同一帧数据,这种情况我们成为掉帧,在视觉上的感受就是卡顿,为了减少掉帧次数,所以引入了三缓冲区技术,合理的使用CPU和GPU

掉帧

屏幕重复渲染同一帧数据

ee74466f7d63

掉帧.png

四、Core Animation

CoreAnimation是苹果提供的一套基于绘图的动画框架

ee74466f7d63

image.png

ee74466f7d63

image.png

Core Animation 流水线

ee74466f7d63

ios-core-animation-pipeline-steps.png

app 本身并不负责渲染,渲染则是由一个独立的Render Server 进程负责。

App 通过 IPC 将渲染任务及相关数据提交给 Render Server。Render Server 处理完数据后,再传递至 GPU。最后由 GPU 调用 iOS 的图像设备进行显示。

Core Animation 流水线的详细过程如下:

首先,由 app 处理事件(Handle Events),如:用户的点击操作,在此过程中 app 可能需要更新 视图树,相应地,图层树 也会被更新。

其次,app 通过 CPU 完成对显示内容的计算,如:视图的创建、布局计算、图片解码、文本绘制等。在完成对显示内容的计算之后,app 对图层进行打包,并在下一次 RunLoop 时将其发送至 Render Server,即完成了一次 Commit Transaction 操作。

Render Server 主要执行 Open GL、Core Graphics 相关程序,并调用 GPU

GPU 则在物理层上完成了对图像的渲染。

最终,GPU 通过 Frame Buffer、视频控制器等相关部件,将图像显示在屏幕上。

Core Animation 图层打包->下一次runloop到来提交给RenderServer->RenderServer通过OpenGL等调用GPU->GPU进行渲染流程(顶点着色器、片元着色器等)->下一次runloop到来的时候显示到屏幕上

这篇关于计算机渲染图片原理,计算机渲染原理与CoreAnimation的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/232085

相关文章

Python利用PIL进行图片压缩

《Python利用PIL进行图片压缩》有时在发送一些文件如PPT、Word时,由于文件中的图片太大,导致文件也太大,无法发送,所以本文为大家介绍了Python中图片压缩的方法,需要的可以参考下... 有时在发送一些文件如PPT、Word时,由于文件中的图片太大,导致文件也太大,无法发送,所有可以对文件中的图

java获取图片的大小、宽度、高度方式

《java获取图片的大小、宽度、高度方式》文章介绍了如何将File对象转换为MultipartFile对象的过程,并分享了个人经验,希望能为读者提供参考... 目China编程录Java获取图片的大小、宽度、高度File对象(该对象里面是图片)MultipartFile对象(该对象里面是图片)总结java获取图片

Java实战之自助进行多张图片合成拼接

《Java实战之自助进行多张图片合成拼接》在当今数字化时代,图像处理技术在各个领域都发挥着至关重要的作用,本文为大家详细介绍了如何使用Java实现多张图片合成拼接,需要的可以了解下... 目录前言一、图片合成需求描述二、图片合成设计与实现1、编程语言2、基础数据准备3、图片合成流程4、图片合成实现三、总结前

MySQL中的MVCC底层原理解读

《MySQL中的MVCC底层原理解读》本文详细介绍了MySQL中的多版本并发控制(MVCC)机制,包括版本链、ReadView以及在不同事务隔离级别下MVCC的工作原理,通过一个具体的示例演示了在可重... 目录简介ReadView版本链演示过程总结简介MVCC(Multi-Version Concurr

使用Python实现图片和base64转换工具

《使用Python实现图片和base64转换工具》这篇文章主要为大家详细介绍了如何使用Python中的base64模块编写一个工具,可以实现图片和Base64编码之间的转换,感兴趣的小伙伴可以了解下... 简介使用python的base64模块来实现图片和Base64编码之间的转换。可以将图片转换为Bas

css实现图片旋转功能

《css实现图片旋转功能》:本文主要介绍了四种CSS变换效果:图片旋转90度、水平翻转、垂直翻转,并附带了相应的代码示例,详细内容请阅读本文,希望能对你有所帮助... 一 css实现图片旋转90度.icon{ -moz-transform:rotate(-90deg); -webkit-transfo

C#实现添加/替换/提取或删除Excel中的图片

《C#实现添加/替换/提取或删除Excel中的图片》在Excel中插入与数据相关的图片,能将关键数据或信息以更直观的方式呈现出来,使文档更加美观,下面我们来看看如何在C#中实现添加/替换/提取或删除E... 在Excandroidel中插入与数据相关的图片,能将关键数据或信息以更直观的方式呈现出来,使文档更

详解如何在React中执行条件渲染

《详解如何在React中执行条件渲染》在现代Web开发中,React作为一种流行的JavaScript库,为开发者提供了一种高效构建用户界面的方式,条件渲染是React中的一个关键概念,本文将深入探讨... 目录引言什么是条件渲染?基础示例使用逻辑与运算符(&&)使用条件语句列表中的条件渲染总结引言在现代

C#中图片如何自适应pictureBox大小

《C#中图片如何自适应pictureBox大小》文章描述了如何在C#中实现图片自适应pictureBox大小,并展示修改前后的效果,修改步骤包括两步,作者分享了个人经验,希望对大家有所帮助... 目录C#图片自适应pictureBox大小编程修改步骤总结C#图片自适应pictureBox大小上图中“z轴

Redis主从/哨兵机制原理分析

《Redis主从/哨兵机制原理分析》本文介绍了Redis的主从复制和哨兵机制,主从复制实现了数据的热备份和负载均衡,而哨兵机制可以监控Redis集群,实现自动故障转移,哨兵机制通过监控、下线、选举和故... 目录一、主从复制1.1 什么是主从复制1.2 主从复制的作用1.3 主从复制原理1.3.1 全量复制