OpenGL ES之概述

2020-07-28  本文已影响0人  徐徐图之哈哈

OpenGL ES 是一种软件技术,部分运行在CPU上,部分运行在GPU上,如苹果官方图片所示:


cpu_gpu_2x.png

注意:

最新OpenGL ES和以前的OpenGL版本之间差异的一种方式就是:最新的OpenGL ES为了支持新改进的方法抛弃了对于旧式的低效的内存复制操作的支持(OpenGL ES仍然支持多种为图形处理器提供数据的方式,但只存在一种最好的方式)

缓存(提供数据的最好方式)

缓存:指图形处理器能够控制和管理的连续RAM

程序从CPU的内存复制数据到OpenGL ES的缓存中,GPU取得一个缓存的所有权后,运行的CPU中的程序理想情况下将不再接触这个缓存。通过控制独占的缓存,GPU就能尽可能以最有效的方式读写内存。图形处理器把它处理大量数据的能力异步同时地应用到缓存上,这意味着在GPU使用缓存中的数据工作的同时,运行在CPU中的程序可以继续执行

为缓存提供数据步骤如下:

  1. 生成 glGenBuffers()-- 请求OpenGL ES为图形处理器控制的缓存生成一个独一无二的标识符
  2. 绑定 glBindBuffer()-- 告诉OpenGL ES接下来的运算使用一个缓存
  3. 缓存数据 glBufferData()或者glBufferSubData() -- 让OpenGL ES为当前绑定的缓存分配并初始化足够的连续内存(通常是从CPU控制的内存复制数据到分配的内存)
  4. 启用 glEnableVertexAttribArray() 或者禁止glDisableVertexAttribArray() -- 告诉OpenGL ES在接下来的渲染中是否使用缓存中的数据
  5. 设置指针 glVertexAttribPointer() -- 告诉OpenGL ES在缓存中的数据的类型和所有需要访问的数据的内存偏移量
  6. 绘图 glDrawArrays()或者glDrawElements() -- 告诉OpenGL ES使用当前绑定并启用的缓存中的数据渲染整个场景或者某个场景的一部分
  7. 删除 glDeleteBuffers() -- 告诉OpenGL ES删除以前生成的缓存并释放相关的资源

帧缓存

GPU需要知道应该在内存中的哪个位置存储渲染出来的2D图像像素数据。就像为GPU提供数据的缓存一样,接收渲染结果的缓冲区叫做帧缓存。

注意:

OpenGL ES上下文

总结

注:本位参考 OpenGL ES应用开发实践 指南iOS卷

上一篇下一篇

猜你喜欢

热点阅读