当前位置:  开发笔记 > 编程语言 > 正文

保存openGL FBO大于窗口的问题

如何解决《保存openGLFBO大于窗口的问题》经验,为你挑选了1个好方法。

我正在渲染到OpenGL屏幕外的帧缓冲对象,并喜欢将其保存为图像.请注意,FBO大于显示尺寸.我可以渲染到屏幕外缓冲区并将其用作纹理,这是有效的.我可以使用偏移量通过显示"滚动"这个更大的纹理,这让我充满信心,我渲染到比窗口更大的上下文.

如果我将屏幕外缓冲区保存到图像文件,它总是会被裁剪.保存的代码片段是:

void ofFBOTexture::saveImage(string fileName) { 
    glReadBuffer(GL_COLOR_ATTACHMENT0_EXT); 
    // get the raw buffer from ofImage
    unsigned char* pixels = imageSaver.getPixels();
    glReadPixels(0, 0, 1024, 1024, GL_RGB, GL_UNSIGNED_BYTE, pixels); 

    imageSaver.saveImage(fileName); 
} 

请注意,图像内容被裁剪,可见部分被正确保存(这意味着像素格式没有错误,GL_RGB问题等),但剩余空间用一种颜色填充.

所以,我的问题是 - 我做错了什么?



1> razong..:

最后我解决了这个问题.

我必须激活fbo以保存其内容:

glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fbo);
// save code
...
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);

而只选择glReadPixels通过的fbo

glReadBuffer(GL_COLOR_ATTACHMENT0_EXT);

是不够的.

(所有其他正确和经过测试的东西,例如视口大小,缓冲区的宽度和高度,图像纹理等)

推荐阅读
重庆制造漫画社
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有