[英]OpenGL: Is it supported to render into an FBO in one context, then use the FBO's texture in another?
我具有以下OpenGL設置,用於解決幀緩沖區問題:
當過程的兩個階段都在同一上下文中完成時,此方法可以正常工作,但是如果階段1在與第二階段不同的上下文中完成,則會中斷(請注意,這些上下文都是共享的,並且都在同一線程上)。 在這種情況下,我只能在調整視口大小(重新創建幀緩沖區)時看到顯示的多維數據集。 多維數據集有時會損壞或碎片化,這使我相信,我所看到的只是紋理調整大小之前紋理所使用的內存部分,並且從未正確顯示任何內容。
我必須進行此設置的原因是,在我的實際應用程序中,我使用的是Qt OpenGL小部件,這些部件必須使用各自的上下文,因此必須在自己的專用上下文中渲染場景,然后將其復制到使用可共享OpenGL資源的相關視口。 如果我不這樣做,我會收到由於VAO在其他情況下綁定/使用而導致的錯誤。
我嘗試了以下不成功的組合(主要上下文是我使用紋理繪制四邊形的位置,而次要上下文是將多維數據集“脫離屏幕”渲染到幀緩沖區中的位置):
另外,由於無法訪問QOpenGLWidget
在應用程序中使用的幀緩沖區,因此我無法使用glBlitFramebuffer()
(據我所嘗試, QOpenGLWidget::defaultFramebufferObject()
返回0導致glBlitFramebuffer
給出我的錯誤)。
我設法使渲染正常工作的唯一方法是使用QOpenGLFrameBuffer
並在要與四邊形一起使用紋理時調用takeTexture()
。 但是,以這種方式進行操作意味着QOpenGLFrameBuffer
會自己創建一個新紋理,使用后我必須銷毀舊紋理,這似乎效率很低。
有什么我可以解決的問題嗎?
我有一個使用這種紋理的項目。 在繪制之后和使用QOpenGLFramebufferObject::texture()
的紋理之前,需要調用glFinish()
QOpenGLFramebufferObject::texture()
。 這是某些操作系統上的問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.