CPU 与 GPU 的架构
- CPU(Central Processing Unit):计算机系统的运算核心,控制核心。
- GPU(Graphics Processing Unit):可进行绘图运算工作的专用微处理器,是连接计算机和显示终端的纽带。

CPU 和 GPU 其设计目标就是不同的,它们分别针对了两种不同的应用场景。CPU 是运算核心与控制核心,需要有很强的运算通用性,兼容各种数据类型,同时也需要能处理大量不同的跳转、中断等指令,因此 CPU 的内部结构更为复杂。而 GPU 则面对的是类型统一、更加单纯的运算,也不需要处理复杂的指令,但也肩负着更大的运算任务。

CPU 拥有更多的缓存空间 Cache 以及复杂的控制单元,计算能力并不是 CPU 的主要诉求。CPU 是设计目标是低时延,更多的高速缓存也意味着可以更快地访问数据;同时复杂的控制单元也能更快速地处理逻辑分支,更适合串行计算。

GPU 拥有更多的计算单元 Arithmetic Logic Unit,具有更强的计算能力,同时也具有更多的控制单元。GPU 基于大吞吐量而设计,每一部分缓存都连接着一个流处理器(stream processor),更加适合大规模的并行计算。
OpenGL 渲染架构

- Client:是指常见的 iOS 代码和 OpenGL API 方法,这部分是在 CPU 中运行
- Server:是指 OpenGL 底层的渲染等处理,是运行在 GPU 中的
由于 Open GL 是基于 C 的 API,因此它非常便携且受到广泛支持。作为 C API,它与基于 Objective-C 的 Cocoa 应⽤程序无缝成。 Open GL 提供应用程序用于⽣成 2D 或 3D 图像的函数。您的应用程序将渲染的图像呈现给屏幕或将它们复制回⾃己的内存。
Open GL 规范没有提供⾃己的窗口层。它依赖于 OS X 定义的功能来将 Open GL 绘图与窗⼝系统集成。您的应用程序创建 OS X Open GL 渲染上下文并将渲染目标附加到其上(称为可绘制对象)。渲染上下文管理 Open GL 状态更改和通过调用 OpenGL API 创建的对象。
数据传递
客户端和服务器进行数据传递的通道有三种
-
Attributes:只能在 vertex shader 中使用,不能在fragment shader中声明attribute变量,也不能被fragment shader中使用,Attributes传递的通常是经常发生变化的数据
-
Uniform:外部 app 程序传递给 shader 的变量,不能被 shader 程序修改,既可以传递到顶点着色器,也可以传递到片元着色器
-
Texture Data:可以将数据传递到顶点和片元着色器,顶点着色器主要是处理顶点数据的,我们将纹理数据传过去并没有多大的意义。而纹理的处理的逻辑主要是在片元着色器中进行的
通道类型 | 参数类型 | 可传入的着色器 |
---|---|---|
Attributes | 纹理坐标 、光照法线、顶点坐标 、颜色数据 | 顶点着色器 |
Uniform | 变换矩阵,材质,光照参数和颜色等信息 | 顶点着色器、片元着色器 |
Texture Data | 纹理 | 顶点着色器、片元着色器 |
网友评论