首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >渲染到窗口帧缓冲区和FBO以保存完整的纹理图像

渲染到窗口帧缓冲区和FBO以保存完整的纹理图像
EN

Stack Overflow用户
提问于 2013-11-26 20:19:59
回答 2查看 3K关注 0票数 3

我想把我的图像处理OpenGL着色器程序的输出保存到一个图像文件中,并在屏幕上显示结果。我知道如何使用glReadPixels()保存窗口框架缓冲区。然而,屏幕的分辨率比图像的尺寸要小。

如果我呈现给FBO,是否需要在保存和解除绑定FBO之后再次调用glDrawArrays()以查看屏幕上的结果?或者可以告诉窗口帧缓冲区从FBO渲染,而不必第二次运行着色程序?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-11-26 21:05:54

要将呈现的图像保存在RBO中,可以通过设置哪个缓冲区OpenGL通过调用glReadBuffer读取像素来直接读取像素。在您的特殊情况下,将读取缓冲区设置为GL_COLOR_ATTACHMENT<i>应该可以做到这一点。有关细节,请参阅glDrawBuffer手册页

为了在FBO中显示图像:是的,您需要进行额外的呈现传递,以便将FBO的图像复制到默认的帧缓冲区中。您可以将FBO绑定为纹理,并按照您的建议呈现几何以在屏幕上获取图像,或者,您可以使用glBlitFramebuffer简化复制和图像过滤。

票数 2
EN

Stack Overflow用户

发布于 2013-11-26 21:55:38

如果我呈现给FBO,是否需要在保存和解除绑定FBO之后再次调用glDrawArrays()以查看屏幕上的结果?

您应该使用glBlitFramebuffer (...),此函数的目的是将一个帧缓冲区(read buffer)复制到另一个帧缓冲区(draw )。如果您没有做一些不寻常的事情,如绘制到整数纹理附件,那么您的FBO的绘图缓冲区应该与您的默认框架缓冲区(窗口)兼容。

还有一些关于过滤器方法和您要复制的图像类型的附加警告(例如深度缓冲区不能使用线性插值),但是由于您在这里讨论的是“全面的”,我想您无论如何都对GL_NEAREST感兴趣。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20227153

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档