1.1 3D渲染
图形处理单元(GPU)就是能够结合几何、颜色、灯光和其他数据而产生一个屏幕图像的硬件组件。屏幕只有二维
用3D数据生成一个2D图像的过程就叫渲染。在计算机上显示的图片是由矩形的颜色点组成的,这些矩形的颜色点叫做像素。
1.2.1 缓存:提供数据的最好方式
OpenGL ES为两个内存区域件的数据交换定义了缓存(buffers)的概念。缓存是指图形处理器能够控制和管理的连续RAM。程序从CPU的内存复制数据到OpenGL ES的缓存。在GPU取得一个缓存的所有权以后,运行在CPU中的程序理想情况下将不再接触这个缓存。通过控制独占的缓存,GPU就能够尽可能以最有效的方式读写内存。图形处理器把它处理大量数据的能力异步同时地应用到缓存上,这意味着在GPU使用缓存中的数据工作的同时,运行在CPU中的程序可以继续执行。
为缓存提供数据有如下7个步骤。
- 生成 -请求OpenGL ES为图形处理控制器的缓存生成一个独一无二的标识符。
- 绑定 -告诉OpenGL ES为接下来的运算使用一个缓存。
- 缓存数据 -让OpenGL ES为当前绑定的缓存分配并初始化足够的连续内存
- 启用或禁用 -告诉OpenGL ES在接下来的渲染中是否使用缓存中的数据。
- 设置指针 -告诉OpenGL ES在缓存中的数据的类型和所有需要访问的数据的内存偏移值。
- 绘图 -告诉OpenGL ES使用当前绑定并启用的缓存中的数据渲染整个场景或某个场景的一部分。
- 删除 -告诉OpenGL ES删除以前生成的缓存并释放相关的资源。
OpenGL ES为一种类型的缓存在使用过程中的每一个步骤的执行定义了c语言函数。
- glGenBuffers() -请求OpenGL ES为图形处理控制器的缓存生成一个独一无二标识符。
- glBindBuffer() -告诉OpenGL ES为接下来运算使用一个缓存。
- glBufferData()或者glBufferSubData() -让OpenGL ES为当前绑定的缓存分配并初始化足够的连续内存。
- glEnableVertexAttribArray()或者glDisableVertexAttribArray() -告诉OpenGL ES在接下来的渲染中是否使用缓存中的数据。
- glVertexAttribPointer() -告诉OpenGL ES在缓存中的数据的类型和所有需要访问的数据的内存便宜。
- glDrawArrays()或者glDrawElements() -告诉OpenGL ES使用当前绑定并启用的缓存中的数据渲染整个场景或某个场景的一部分。
- glDeleteBuffers() -告诉OpenGL ES删除以前生成的缓存并释放相关的资源。
1.2.2 帧缓存
GPU需要知道应该在内存中哪个位置存储渲染出来的2D图像像素数据。就像为GPU提供数据缓存一样,接收渲染结果的缓冲区叫做帧缓存(frame buffer)。
1.3 OpenGL ES的上下文
用于配置OpenGL ES的保存在特定平台的软件数据结构中的信息会被封装到一个OpenGL ES上下文(context)中。