glReadPixels的用法和说明

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

2.显存也被叫做显示内存、帧缓存,它是用来存储显示芯片处理过或者即将读取的渲染数据。如同计算机的内存一样,显存是用来存储图形数据的硬件。在显示器上显示出的画面是由一个个的像素点构成的,而每个像素点都以4至64位的数据来控制它的亮度和色彩,这些点构成一帧的图形画面。为了保持画面流畅,要输出和要处理的多幅帧的像素数据必须通过显存来保存,达到缓冲效果,再交由显示芯片和CPU调配,最后把运算结果转化为图形输出到显示器上。

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

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

                                GLint y,

                                GLsizei width,

                                GLsizei height,

                                GLenum format,

                                GLenum type,

                                GLvoid * data);

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

参数

x,y

指定从帧缓冲区读取的第一个像素的窗口坐标。 此位置是矩形像素块的左下角。

width,height

指定像素矩形的尺寸。 一个宽度和高度对应于单个像素。

format

指定像素数据的格式。 接受以下符号值:GL_ALPHA,GL_RGB和GL_RGBA。

type

指定像素数据的数据类型。 必须是GL_UNSIGNED_BYTE,GL_UNSIGNED_SHORT_5_6_5,GL_UNSIGNED_SHORT_4_4_4_4或GL_UNSIGNED_SHORT_5_5_5_1之一。

data

返回像素数据。

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

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

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

参考:

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

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

https://www.baidu.com/link?url=qorpcHsHnhfaaNEjFETzCJUbR3CcsVxGVFNSNI15imOf5dEEIZHaLTU-YPngmYTOalLKBu5IlMjnwrVUtlrJBSybeZ_xLE1Ue–MXACtZQe&wd=&eqid=991c4efd0000cd3f000000035daffac5

  • 17
    点赞
  • 50
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
glReadPixels函数是OpenGL中的一个函数,用于将指定区域的像素数据从帧缓冲区读取到内存中。 函数原型如下: void glReadPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid *pixels); 参数说明: - x, y:指定要读取的矩形区域的起点坐标。 - width, height:指定要读取的矩形区域的宽度和高度。 - format:指定读取的像素数据的格式,可以是GL_RGB、GL_RGBA等。 - type:指定读取的像素数据的数据类型,可以是GL_UNSIGNED_BYTE、GL_UNSIGNED_SHORT等。 - pixels:指定一个指针,用于存储读取到的像素数据。 使用示例: ```cpp GLubyte* pixels = new GLubyte[width * height * 3]; // 分配内存用于存储像素数据 glReadPixels(0, 0, width, height, GL_RGB, GL_UNSIGNED_BYTE, pixels); // 读取像素数据 // 使用读取到的像素数据进行处理 for (int i = 0; i < width * height * 3; i += 3) { GLubyte r = pixels[i]; GLubyte g = pixels[i + 1]; GLubyte b = pixels[i + 2]; // 进行处理... } delete[] pixels; // 释放内存 ``` 注意事项: - glReadPixels函数将像素数据从帧缓冲区复制到内存中,因此会有一定的性能开销,尽量避免在每一帧都调用该函数。 - 在调用glReadPixels之前,需要确保帧缓冲区已经完成渲染,并且刷新到屏幕上。 - 在读取像素数据之前,需要先分配足够的内存空间来存储像素数据,然后在使用完毕后记得释放内存。 - 根据format和type参数的不同组合,可以读取不同格式和数据类型的像素数据,可以根据实际需求进行选择。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值