2008-11-08 251 views
1

我正在使用QT的QGLFramebufferObject离屏渲染。
渲染到缓冲器后,我读取使用glReadPixels()的结果
的问题是,有时背景颜色我读只是0(透明黑色)和有时是0xFF000000(不透明黑色)
这似乎是相关到缓冲区初始化的时间。如果缓冲区是从QGLWidget继承的类的成员,那么它是0.如果它在其他地方被初始化,它就是0xFF000000。OpenGL背景透明度?

有没有人知道这里发生了什么?这篇文章的预期结果是什么?

回答

1

您是否设置了正确的清晰颜色(glClearColor)并实际做了清晰的(glClear)?你确定你的颜色写入(glColorMask)掩码是完全启用的(它也影响清除)。接下来,您可以检查QT是否设置了一些奇怪的像素副本传输(除了默认值,请参阅glPixelStore,glPixelTransfer和glPixelMap)。你确定你在两种情况下都得到(并读入)RGBA缓冲区,而不仅仅是RGB?最后,framebuffer对象扩展很有可能在您的特定显卡/驱动程序组合上出现问题,如果没有主要的可视窗口,则更是如此。至少检查两个供应商的卡片。当然,在所有潜在的失败操作之后,总是要检查glGetError。 重新阅读您的问题后,您是否在非QGLWidget案例中获得任何其他有效渲染?说清楚绿色,还是绿色?因为在这种情况下,您可能只是没有初始化任何有效的OpenGL上下文。与pbuffers不同,Framebuffer对象需要外部上下文。

0

神秘解决
看来,我给GLWidget的清晰颜色是0,默认的清晰颜色是0xff000000。根据我什么时候初始化framebuffer对象,它接收GLWidget的当前清除颜色。