1. 1缓存 (buffer)
* OpenGLES 为GPU和CPU的内存区域 数据交换定义了缓存(buffer)的概念。*
优点:缓存是指 图形处理器能够 制和管理的 RAM。程序从 CPU 的内存复制数据到 OpenGL ES 的缓存。在 GPU 取得一个缓存的所有权以后,运行在 CPU 中的程序理想情况下将不 再接 这个缓存。通过 制独 的缓存,GPU 就能够尽可能以最有效的方式读写内存。 图形处理器把它处理大量数据的能力异步同时地应用到缓存上,这意 着在 GPU 使用 缓存中的数据工作的同时,运行在 CPU 中的程序可以 行。
为缓存提供数据的步骤
- 生成(generate) — 请求OpenGL ES 为图形处理器控制的缓存生成一个独一无二的标识符。
- 函数:glGenBuffers()
- 绑定(Bind) — 告诉OpenGL ES 为接下来的运算使用一个缓存。
- 函数:glBindBuffer()
- 缓存数据(Buffer Data) — 函数: — 让OpenGL ES 为当前绑定的缓存分配并初始化足够的的连续内存(通常是从 CPU 制的内存复制数据到分配的内存)。
- 函数:glBufferData() 或者 glBufferSubData()
- 启用(Enable) 或 禁止(Disable) —告诉 OpenGL ES 在接下来的渲染中是否使用缓存中的数据。
- 函数:glEnableVertexAttribArray() 或 glDisableVertexAttribArray()
- 设置指针(Set Pointers) —告诉OpenGL ES 缓存中的数据类型 和 所有需要访问的数据的内存 偏移值。
- 函数:glVertexAttribPointer()
- 绘图(Draw) —告诉OpenGL ES 使用绑定并启用的的缓存数据 来 渲染整个场景或者某一个部分。
- 函数:glDrawArrays() 或者 glDrawElements()
- 删除(Delete) —告诉OpenGL ES 删除以前生成的缓存并释放资源。
- 函数:glDeleteBuffers()
备注:缓存的 生成、初始化、删除需要花费时间来同步GPU和CPU,存在这个等待时间是因为GPU删除一个缓存之前必须完成所有 与该缓存先关的等待中的运算,如果GPU每秒都生成 删除缓存很多次,那么GPU久没有时间来完成任何渲染了。
1.2帧缓存
接收GPU渲染的结果的缓冲区叫做帧缓存。
帧缓存特点:
1. 不需要初始化,渲染指令会在适当的时候 换缓存的内容。
2. 绑定时隐式开启,同时OpenGL ES会自动地根据特定平台的硬件 配置和功能来设置数据的类型和 移。
3. 可同时存在多个帧缓存,并且可以通过 OpenGL ES 让 GPU 把渲染结果存 到 任意数量的 缓存中。
备注: OpenGL ES 让 GPU 把渲染结果存 到 任意数量的 缓存中。但是, 显示像 要 到保存在前 缓存(front frame buffer) 的特定 缓存中的像 颜色元 的 制。程序和操作系统很少会 接渲染到前 缓存中。因为那样会让用户 到正在渲染中的还没渲染完成的图像。相反,程序和操作系统 会把渲染结果保存到包括后 缓存(back frame buffer)在内的其他 缓存中。当渲染 后的后 缓存包含一个完成的图像时,前 缓存与后 缓存几乎会 间切换。后 缓 存会变成新的前 缓存,同时 的前 缓存会变成后 缓存。
小结:
OpenGL ES 是 类 iPhone 和 iPad 的现代嵌入式系统的 3D 图形加速硬件的标 准。把程序提供的几何数据 换为 上的图像的过程 做渲染。GPU 制的缓存是 高效渲染的关 。容 几何数据的缓存定义了要渲染的点、线 和三角形。OpenGL ES 3D 的 标系、顶点和 量为几何数据的 述提供了数学基础。渲染的结果通常保 存在 缓存中。有 个特别的 缓存,前 缓存和后 缓存,它们 制着 像 的最 终颜色。OpenGL ES 的上下文保存了 OpenGL ES 的状态信息,包括用于提供渲染数据 的缓存地 和用于接 渲染结果的缓存地 。