[英]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.