简介:OpenGL ES 运行跨越CPU , GPU 之间,协调两个内存区域之间的数据交换。
关于OpenGL ES 缓存
OpenGL ES 为两个内存区域间数据交换定义了缓存的概念,缓存是指图形处理器能够控制和管理的连续RAM,程序从CPU的内存复制数据到OpenGL ES 的缓存。在GPU取得一个缓存的所有权以后,运行在CPU中的程序理想情况下将不再接触这个缓存。这样就意味着在GPU尽可能以最有效的方式读写内存处理大量数据时,运行在CPU中的程序也可以继续执行。
提供给GPU的数据都应该放入缓存中,为缓存提供数据有以下七个步骤
- glGenBuffers() 请求OpenGL ES 为图形处理器控制的缓存生成标志符
- glBindBuffer() 绑定相关内存,即告诉OpenGL ES 为接下来的运算使用一个缓存
- glBufferData() / glBufferSubData() 让OpenGL ES 为当前绑定的缓存分配并初始化足够的连续内存(通常是从CPU控制的内存复制数据到分配的内存)
- glEnableVertexAttribArray() / glDisableVertexAttribArray() 通知OpenGL ES 在接下来的渲染中是否使用缓存中的数据
- glVertexAttribPointer() 通知OpenGL ES 在缓存中的数据的类型和所有需要访问的数据的内存偏移值。
- glDrawArrays() / glDrawElements() 通知OpenGL ES 使用当前绑定并启用的缓存中的数据渲染整个场景或某个场景的一部分。
- glDeleteBuffers() 通知OpenGL ES 删除该缓存
纹理的概念
纹理是一个用来保存图像的颜色元素值的OpenGL ES 缓存。 可通过添加(u,v)坐标对应纹素(s,t)坐标。通过GLKTextureLoader 的“-textureWithCGImage:options:error:”方法创建一个图像的像素数据的OpenGL ES 纹理缓存。其中还有些取样模式等内容。