2008-11-08 185 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的當前清除顏色。