如何保存帧缓冲区然后将其取回

Posted

技术标签:

【中文标题】如何保存帧缓冲区然后将其取回【英文标题】:How to save the frame buffer and then retrieve it back 【发布时间】:2009-05-17 05:56:34 【问题描述】:

嗨,我对 openGL 非常陌生,我正在尝试做一个类似于绘画工具的小项目。所以我只想将所有内容保存在帧缓冲区中以保存在文件中并检索他们回来了..

【问题讨论】:

【参考方案1】:

帧缓冲区中的所有内容?

如果您尝试在前/后缓冲区中捕获当前图像,glReadPixels(从帧缓冲区读取像素块)以及 glReadBuffer 可能是您正在寻找的。 see OpenGL manual。这不一定是最快的方法,取决于您可以与硬件一起使用的扩展,可能有更快的方法,但 glReadPixels 使用起来相当简单。 glDrawPixels 将帮助您将数据返回到帧缓冲区。您可以将原始图像存储到磁盘或根据需要进行转换/压缩。

【讨论】:

【参考方案2】:

如果您希望将所有对象保存到文件中并重新加载它们,我认为您不应该使用 OpenGL 来执行此操作。将对象发送到 OpenGL 后,您通常不会再次修改它们。如果您正在编写某种应用程序来在屏幕上绘制许多对象,那么您自己跟踪对象是最简单的。

如果您要检索最终图像,您可以使用 glReadPixels - 获取原始像素数据,或 glCopyTexImage2D - 将屏幕上的内容保存到纹理中,以便在 OpenGL 中进一步使用。

【讨论】:

以上是关于如何保存帧缓冲区然后将其取回的主要内容,如果未能解决你的问题,请参考以下文章

如何从 OpenGL 中的帧缓冲区纹理中采样像素?

使用帧缓冲区对象作为纹理的视觉问题

OpenGL 渲染到纹理 - 黑屏

渲染到窗口帧缓冲区和 FBO 以保存全尺寸纹理图像

如何在 libgdx 中重用帧缓冲纹理

使用 stbi_write_png 从 OpenGL 帧缓冲区保存的 PNG 向右移动