Qt OpenGL背景透明度?

Qt OpenGL背景透明度?,qt,opengl,rendering,Qt,Opengl,Rendering,我正在使用QT的QGLFramebufferObject进行屏幕外渲染。 渲染到缓冲区后,我使用glReadPixels()读取结果 问题是,有时我读取的背景色仅为0(透明黑色),有时为0xFF000000(不透明黑色) 这似乎与缓冲区初始化的时间有关。如果缓冲区是从QGLWidget继承的类的成员,那么它是0。如果在其他任何地方初始化,则为0xFF000000 有人知道这里发生了什么吗?本阅读的预期效果如何?您是否设置了正确的清晰颜色(glClearColor)并实际执行了清晰(glClear

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


有人知道这里发生了什么吗?本阅读的预期效果如何?

您是否设置了正确的清晰颜色(glClearColor)并实际执行了清晰(glClear)?是否确保已完全启用颜色写入(GLCOLORSMASK)掩码(它还影响清除)。接下来,您可以检查QT是否设置了一些奇怪的像素复制传输(除了默认设置之外,请参阅glPixelStore、glPixelTransfer和glPixelMap)。您确定在这两种情况下都获得(并读取)RGBA缓冲区,而不仅仅是RGB吗?最后,在您的特定图形卡/驱动程序组合上,帧缓冲区对象扩展很可能有缺陷,如果没有主可见窗口,情况更是如此。至少检查两个供应商的卡片。当然,在所有可能失败的操作之后,始终要检查glGetError。
在重新阅读您的问题之后,您是否在非QGLWidget情况下获得了任何其他有效的呈现?明说绿色,还绿色?因为在这种情况下,很可能您没有初始化任何有效的OpenGL上下文。与PBuffer不同,帧缓冲区对象需要外部上下文

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

谜团已解开
似乎我给GLWidget的清晰颜色是0,默认的清晰颜色是0xff000000。根据初始化帧缓冲区对象的时间,它将接收GLWidget当前的清晰颜色。

谜团已解决
似乎我给GLWidget的清晰颜色是0,默认的清晰颜色是0xff000000。根据初始化帧缓冲区对象的时间,它将接收GLWidget的当前清除颜色