美文网首页DevSupport
iOS绘制与渲染--GPU和OpenGL

iOS绘制与渲染--GPU和OpenGL

作者: 人生看淡不服就干 | 来源:发表于2017-03-27 17:05 被阅读923次

GPU简介

关于绘图和动画有两种处理的方式:CPU(中央处理器)和GPU(图形处理器)。在现代iOS设备中,都有可以运行不同软件的可编程芯片,但是由于历史原因,我们可以说CPU所做的工作都在软件层面,而GPU在硬件层面。

总的来说,我们可以用软件(使用CPU)做任何事情,但是对于图像处理,通常用硬件会更快,因为GPU使用图像对高度并行浮点运算做了优化。由于某些原因,我们想尽可能把屏幕渲染的工作交给硬件去处理。问题在于GPU并没有无限制处理性能,而且一旦资源用完的话,性能就会开始下降了(即使CPU并没有完全占用)

大多数动画性能优化都是关于智能利用GPU和CPU,使得它们都不会超出负荷。于是我们首先需要知道Core Animation是如何在这两个处理器之间分配工作的。


GPU为一个具体的任务做了优化:它用来采集图片和形状(三角形),运行变换,应用纹理和混合然后把它们输送到屏幕上。现代iOS设备上可编程的GPU在这些操作的执行上又很大的灵活性,但是Core Animation并没有暴露出直接的接口。除非你想绕开Core Animation并编写你自己的OpenGL着色器,从根本上解决硬件加速的问题,那么剩下的所有都还是需要在CPU的软件层面上完成。

宽泛的说,大多数CALayer的属性都是用GPU来绘制。比如如果你设置图层背景或者边框的颜色,那么这些可以通过着色的三角板实时绘制出来。如果对一个contents属性设置一张图片,然后裁剪它 - 它就会被纹理的三角形绘制出来,而不需要软件层面做任何绘制。

OpenGL简介

OpenGL是Open Graphics Library的缩写,是个定义了一个跨编程语言、跨平台的编程接口的标准,显卡通常有OpenGL的实现,不同显卡上的OpenGL实现也不一定相同,OpenGL标准不是平台相关的,所以同一个程序可能在不同的显卡上运行。OpenGL API只处理图形渲染,并不提供动画、定时器、文件IO、图像文件格式处理、GUI等功能。OpenGL不是开源代码,OpenGL指的是开放标准,在网上可以找到,任何人都可以免费下载,也有一个开源的GL实现,名叫 Mesa3D,已经实现了OpenGL 3.0和GLSL 1.30。

OpenGL被当作客户端-服务器系统来实现的,应用程序是客户端,图形硬件厂商提供的OpenGL实现是服务器。如下图所示,客户端程序需要调用OpenGL的接口实现3D渲染,那么OpenGL命令和数据会缓存在RAM中,在一定条件下,会将这些命令和数据通过CPU时钟发送到VRAM,在GPU的控制下,使用VRAM中的数据和命令,完成图形的渲染,并将结果存入帧缓冲区中,帧缓冲区中的帧最终会被发送到显示器上,显示出结果。在现代的图形硬件系统中,还支持不通过CPU时钟直接将数据由RAM发送至VRAM或直接将数据由帧缓冲区发送至RAM(例如OpenGL中的VBO,PBO)。


如下图所示,OpenGL中的顶点、像素等数据需要通过不同阶段的处理,才能产生最后的可视图像,就像是工厂里的生产线,称为图形渲染管线。像素和顶点数据可以选择存储在显示列表中,我们可以把显示列表看成是存储数据的媒介,用于加速渲染速度。顶点数据经过求值器,产生法向量、纹理坐标、点的空间坐标等,通过顶点操作和图元装配,生成相应的像素信息,进行光栅化处理,光栅化是把几何和像素数据转化成片段,每个片段块对应帧缓冲区中的一个像素。其中,顶点操作和图元装配中又可以细分出一条渲染管线,这里称为顶点处理管线。在光栅化完成后,还可以根据命令,对每个像素进行处理,最后写入帧缓冲区内。


管线这个术语描述了opengl渲染的整个过程。openGL采用cs模型:c是cpu,s是GPU,c给s的输入是 vertex信息和Texture信息 ,s的输出是显示器上显示的图像。下面这2个图比较清楚的讲解了opengl的渲染管线。

相关文章

  • iOS绘制与渲染--GPU和OpenGL

    GPU简介 关于绘图和动画有两种处理的方式:CPU(中央处理器)和GPU(图形处理器)。在现代iOS设备中,都有可...

  • OpenGL学习--基础学习

    首先知道OpenGL/OpenGL ES/Metal 都是利用GPU芯片高效渲染图形图像,图形API 是iOS开发...

  • metal初探

    前言 metal是iOS底层图形渲染技术,它是利用GPU进行渲染,它允许我们程序员直接操作GPU绘制,所以相比UI...

  • 初识MetalView

    Metal metal是iOS设备的一个底层图形API,功能类似OpenGL,支持图形渲染和GPU通用计算.met...

  • 离屏渲染之我知

    相比于当前屏幕渲染,离屏渲染的代价是很高的,这也是iOS移动端优化的必要部分。 OpenGL中,GPU屏幕渲染有以...

  • iOS图形绘制框架 ——UIBezierPath 、Core G

    iOS图形绘制框架 ——UIBezierPath 、Core Graphics 和OpenGL iOS图形绘制框架...

  • 话说 离屏渲染

    OpenGL中,GPU屏幕渲染有两种方式. On-Screen Rendering (当前屏幕渲染)指的是GPU的...

  • iOS开发中的CPU渲染

    CPU发出绘制指令,GPU执行绘制指令。CPU通过OpenGL/Metal给GPU发送各种绘制指令,同时把自己的内...

  • iOS专项测试--instrument获取CPU

    在iOS中,渲染通常分为CPU和GPU渲染两种,而GPU渲染又分为在GPU缓冲区和非GPU缓冲区两种 CPU(中央...

  • 关于 iOS 离屏渲染的分析与处理

    一、OpenGL中,GPU屏幕渲染有以下两种方式 On-Screen Rendering 当前屏幕渲染: 是GPU...

网友评论

    本文标题:iOS绘制与渲染--GPU和OpenGL

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