我正在渲染到 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 问题等),但剩余空间被一种颜色填充。
所以,我的问题是——我做错了什么?