用于在许多Qopenglwidget中显示的FBO渲染的全局OpenGL上下文

Global OpenGL context for rendering in fbo to display in many QOpenGLWidget

本文关键字:全局 OpenGL 上下文 FBO 用于 许多 Qopenglwidget 显示      更新时间:2023-10-16

我想在同一窗口中的许多Qopenglwidget中显示一个具有不同视角的场景(与QSplitter架构分开)。重要的是,我只想在GPU上存储一次场景数据(几何和纹理)。但是,每个Qopenglwidget都有自己的Qopenglcontext。

我的想法是创建一个独立上下文,将场景渲染到framebufferobject(而不是qframeBufferObject),并在关注的qopenglwidget中使用结果纹理。

从技术上讲,我的方法是创建一个新的Qopenglcontext和qoffscreensurface。但是,当我想使用Qopenglcontext给出的结果Qopenglfunctions时,即使我检查了我的创建Qopenglcontext是有效的,它也会停止分段故障。

以更一般的方式,我很难理解Qopenglcontext,Surface(我的QoffScreensurface)和MakeCurrent函数的作用。

我的请求是了解做这件事的好方法是什么,以及为什么我会遇到分割错误。

我回来了我的问题。

实际上,我已经将我的第一个初始化的Qopenglwidget的上下文作为全局上下文来避免创建新的上下文。

棘手的部分是每次需要的全局上下文当前(在GPU上添加数据或使用FBO)。

油漆步骤很简单: - 使全球上下文当前。 - 启动FBO记录。 - 渲染场景。 - 停止FBO记录。 - 使Qopenglwidget上下文当前。 - 在屏幕上渲染FBO结果。

我已经使用gdebugger检查了我的内存,我所有的内存都在全局上下文中(仅存储一次)。