1

我正在使用 QT 的 QGLFramebufferObject 进行离屏渲染。
渲染到缓冲区后,我使用 glReadPixels() 读取结果
问题是,有时我读取的背景颜色只是 0(透明黑色),有时是 0xFF000000(不透明黑色)
这似乎与缓冲区的时间有关初始化。如果缓冲区是从 QGLWidget 继承的类的成员,则为 0。如果在其他任何地方初始化,则为 0xFF000000。

有人知道这里发生了什么吗?这次阅读的良好预期结果是什么?

4

2 回答 2

1

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

于 2008-11-08T06:19:42.377 回答
0

谜团解开
了看来我给GLWidget的清色是0,默认清色是0xff000000。根据我初始化帧缓冲区对象的时间,它会接收 GLWidget 的当前清除颜色。

于 2008-11-08T07:24:16.363 回答