linux中QGLFrameBufferObject渲染的颜色错误

linux中QGLFrameBufferObject渲染的颜色错误,linux,qt,opengl,alpha,fbo,Linux,Qt,Opengl,Alpha,Fbo,当我将操作系统从win7更改为Ubuntu 12.04 LTS时,我遇到了QGLFrameBufferObject的一些问题。在新的ubuntu系统中重新编译代码后,颜色会出错。所以我做了一个最小的测试。我只是用颜色(1.0,0.0,0.0,0.8)清除颜色缓冲区,就这样 当我直接渲染到屏幕时,所有像素都是(1.0、0.0、0.0、0.8),我得到了正确的结果 但是,脱机渲染(使用QGLFrameBufferObject)的结果是错误的,如offline.png所示。此颜色为(0.3,0.0,0

当我将操作系统从win7更改为Ubuntu 12.04 LTS时,我遇到了QGLFrameBufferObject的一些问题。在新的ubuntu系统中重新编译代码后,颜色会出错。所以我做了一个最小的测试。我只是用颜色(1.0,0.0,0.0,0.8)清除颜色缓冲区,就这样

当我直接渲染到屏幕时,所有像素都是(1.0、0.0、0.0、0.8),我得到了正确的结果

但是,脱机渲染(使用QGLFrameBufferObject)的结果是错误的,如offline.png所示。此颜色为(0.3,0.0,0.0,0.8)


当alpha>0.0和链接的问题给出提示时,就会出现此问题:代码中没有任何地方可以启用混合。 尝试添加

 glEnable(GL_BLEND​​);

在进行任何渲染之前。

正如@Nicol Bolas指出的,问题在于
fbo.toImage().save(“offline.png”),在
toImage()函数中。返回的图像是以“QImage::Format_ARGB32_Premultiplied”格式创建的,但像素颜色数据设置为
QImage::Format_ARGB32
格式。也许这是Qt4.8中的一个bug。我认为通过在
QImage qt\u gl\u read\u framebuffer(const QSize&size,bool alpha\u Format,bool include\u alpha)中将
QImage::Format\u ARGB32\u预乘
更改为
QImage::Format\u ARGB32
,可以解决这个问题。此代码位于
qgl.cpp
中。不过我还没有试过。

谢谢你的回复,我尝试在glClearColor之前添加这句话,但没有任何变化。“fbo.toImage().save(“offline.png”);”我更担心这会出错。如果你把FBO放在屏幕上会是什么样子?是的!这是图像功能的问题。当我直接绑定fbo的纹理时,我可以从屏幕上看到它工作得很好。非常感谢。然后我必须检查toImage的问题是什么。
 glEnable(GL_BLEND​​);