GPU渲染完数据在显存,回传内存的唯一方式glReadPixels函数。。。

glReadPixels:读取一些像素。当前可以简单理解为“把已经绘制好的像素(它可能已经被保存到显卡的显存中)读取到内存”。

3、glReadPixels的用法和举例
3.1 函数的参数说明
该函数总共有七个参数。

前四个参数可以得到一个矩形,该矩形所包括的像素都会被读取出来。

(第一、二个参数表示了矩形的左下角横、纵坐标,坐标以窗口最左下角为零,最右上角为最大值;第三、四个参数表示了矩形的宽度和高度)
第五个参数表示读取的内容,例如:GL_RGB就会依次读取像素的红、绿、蓝三种数据,GL_RGBA则会依次读取像素的红、绿、蓝、alpha四种数据,GL_RED则只读取像素的红色数据(类似的还有GL_GREEN,GL_BLUE,以及GL_ALPHA)。如果采用的不是RGBA颜色模式,而是采用颜色索引模式,则也可以使用GL_COLOR_INDEX来读取像素的颜色索引。目前仅需要知道这些,但实际上还可以读取其它内容,例如深度缓冲区的深度数据等。
第六个参数表示读取的内容保存到内存时所使用的格式,例如:GL_UNSIGNED_BYTE会把各种数据保存为GLubyte,GL_FLOAT会把各种数据保存为GLfloat等。
第七个参数表示一个指针,像素数据被读取后,将被保存到这个指针所表示的地址。注意,需要保证该地址有足够的可以使用的空间,以容纳读取的像素数据。例如一幅大小为256*256的图象,如果读取其RGB数据,且每一数据被保存为GLubyte,总大小就是:256*256*3 = 196608字节,即192千字节。如果是读取RGBA数据,则总大小就是256*256*4 = 262144字节,即256千字节。

注意:glReadPixels实际上是从缓冲区中读取数据,如果使用了双缓冲区,则默认是从正在显示的缓冲(即前缓冲)中读取,而绘制工作是默认绘制到后缓冲区的。因此,如果需要读取已经绘制好的像素,往往需要先交换前后缓冲。

=======================================

参考:

http://blog.csdn.net/ryfdizuo/article/details/45442745

http://blog.csdn.net/ghost129/article/details/4409565

最新文章

  1. 【原创】开源.NET排列组合组件KwCombinatorics使用(三)——笛卡尔积组合
  2. 如何解决Oracle RAC 安装集群软件或数据库时无法自动识别节点
  3. iOS文件解压&&数据加密
  4. High购电商系统开发注意点
  5. js 与或运算符 || && 妙用
  6. chrome浏览器取消置顶的方法
  7. 【转】linux Centos 6.5 安装桌面环境GNOME
  8. my97datepicker开始日期小于结束日期格式化时间精确届时分秒
  9. BZOJ 2276 Temperature
  10. 关于C++的const对象
  11. Java中Bean是什么
  12. 利用JavaScriptSerializer转json实用方法
  13. jsp Servlet 文件上传
  14. java io系列18之 CharArrayReader(字符数组输入流)
  15. 题解-拉格朗日(bzoj3695变种)
  16. CentOS6.5优化脚本以及检测优化脚本
  17. lucene solr
  18. mysql5.7执行sql语句报错:In aggregated query without GROUP BY, expression #1 of SELECT list contains nonagg
  19. 本地同时安装python2和python3时pip报错
  20. Task的运行原理和工作窃取

热门文章

  1. BZOJ 4034 BIT & Dfs序
  2. codeforces 682D(DP)
  3. Debugging Process Startup
  4. 防止apache下面直接输入目录访问文件
  5. M4: 使用CommandBar
  6. 修改LR自带的示例程序端口号
  7. super.onCreate(SavedInstanceState);
  8. 《统计推断(Statistical Inference)》读书笔记——第3章 统计分布族
  9. Nginx 下配置SSL证书的方法
  10. yii2整理