C++ OpenGL:是否支持在一个上下文中渲染成FBO,然后使用FBO';另一个是什么纹理?
我使用以下OpenGL设置来解决帧缓冲区问题:C++ OpenGL:是否支持在一个上下文中渲染成FBO,然后使用FBO';另一个是什么纹理?,c++,qt,opengl,C++,Qt,Opengl,我使用以下OpenGL设置来解决帧缓冲区问题: 我将立方体渲染到帧缓冲区中 我使用此帧缓冲区中的目标纹理绘制一个带纹理的四边形,它在视口中显示立方体 当流程的两个阶段都在同一上下文中完成时,这种方法可以正常工作,但如果阶段1在与阶段2不同的上下文中完成(请注意,这些上下文都是共享的,并且都在同一线程上),则会中断。在这种情况下,我只在调整视口大小(重新创建帧缓冲区)时才看到显示的立方体。立方体有时会损坏或支离破碎,这让我相信,我看到的只是纹理在调整大小之前使用的部分内存,并且没有任何东西能够正确
- 在次上下文中创建帧缓冲区、渲染缓冲区和纹理
- 在次上下文中创建帧缓冲区和渲染缓冲区,在主上下文中创建纹理,然后将纹理附加到次上下文中的帧缓冲区
- 在次上下文中创建帧缓冲区、其渲染缓冲区和两个单独的纹理。其中一个纹理最初附加到帧缓冲区进行渲染。对帧缓冲区的渲染完成后,将分离第一个纹理,并附着第二个纹理。包含渲染内容的先前附加纹理与主上下文中的四边形一起使用
glBlitFramebuffer()
,因为我无法访问QOpenGLWidget
在应用程序中使用的帧缓冲区(据我所知,QOpenGLWidget::defaultFramebufferObject()
返回0,这会导致glBlitFramebuffer
给我错误)
我成功地使渲染工作正常的唯一方法是使用QOpenGLFrameBuffer
,并在我想将纹理与四边形一起使用时调用takeTexture()
。然而,这样做意味着QOpenGLFrameBuffer
会为自己创建一个新的纹理,一旦我使用了它,我就必须销毁旧的纹理,这看起来效率很低
我能做些什么来解决这个问题吗?我有一个项目使用了这样的纹理。在绘制之后和使用
QOpenGLFramebufferObject::texture()
中的纹理之前,需要调用glFinish()
。这就是我们在一些操作系统上遇到的问题。“在我的实际应用程序中,我使用的是Qt OpenGL小部件,它们被迫使用各自的上下文。”有什么办法可以避免这样做吗?就我目前所知,没有。我想以前QGLWidget支持它,但新的Qt5 OpenGL API不支持它。@rabbi76,已修复。我尝试过,不幸的是,它似乎没有什么不同。今天早上,我确实能够做到这一点!我只需要在FBO发布后的FBO上下文中的正确位置调用它。非常感谢你的提示!