glReadPixels 与 glPixelStore 的使用

Posted

技术标签:

【中文标题】glReadPixels 与 glPixelStore 的使用【英文标题】:glReadPixels usage with glPixelStore 【发布时间】:2013-01-13 09:45:30 【问题描述】:

我查看了多个关于 glReadPixels 的教程,但我很困惑:

void glReadPixels(GLint x, GLint y, GLsizei 宽度, GLsizei 高度, GLenum 格式, GLenum 类型, GLvoid * 数据)

最后一个参数是无效的? 我看到了教程,他们将参数声明为向量,无符号字符,GLubyte,... 但它的真正含义是什么? 你需要调用 glPixelStoref( , ) 吗?

【问题讨论】:

【参考方案1】:

void* 是 C/C++ 中的“指向内存块的指针”。 glReadPixels 的目的是获取帧缓冲区的一部分并将像素数据写入内存。 data 参数是它写入的“你的记忆”。

确切地写什么以及在多大程度上取决于pixel transfer parameters、formattype。这就是为什么需要void*;因为它可能正在写入一个字节数组、一个整数数组、一个浮点数组等。这完全取决于这两个参数的含义。

【讨论】:

我要补充的一件事(可能会有所帮助)是,您不能在抗锯齿缓冲区上使用 glReadPixels。这意味着您可能需要创建自己的屏幕外缓冲区,其中包含您的场景副本但 AA 已禁用。

以上是关于glReadPixels 与 glPixelStore 的使用的主要内容,如果未能解决你的问题,请参考以下文章

glReadPixels 与屏幕像素

如何在不同的线程上调用 glReadPixels?

glReadPixels 不更新值

为啥 glreadpixels 仅在某些情况下有效?

从 glReadPixels 创建 HBITMAP

如何使用 glReadPixels 读取浮点数据