gpt4 book ai didi

c++ - Qt 和 OpenGL,为多个小部件使用一个上下文

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:30:12 25 4
gpt4 key购买 nike

我最近问了一个关于如何解决跨多个上下文共享顶点数组对象和帧缓冲区对象的问题,然后我确信使用多个上下文只会导致比解决方案更令人头疼的问题。

我正在使用 Qt,目前我的设置是我有一个不可见的 QGLWidget,然后我在我的可见 QGLWidget 的构造函数中使用它来共享资源,这很好地接受了我不能跨上下文共享某些东西。

我希望找到一个解决方案,使我能够使用单个上下文来呈现我所有不同的小部件,this question指的是使用 QGLWidget 构造函数,在其中传递您希望共享的 QGLContext,但这似乎并没有使用一个公共(public)上下文,而是将上下文设置为由一个 QGLWidget 使用,当您尝试在第二个上使用它时小部件,调用 qWarning 通知您 QGLContext 必须引用您将其传递给的小部件。

我的应用程序的目标是拥有 2 个独立的 GUI,它们呈现不同的场景,但共享相同的上下文。目前我有一个“世界”编辑器,可以编辑场景并将其保存到一个文件中,以便在我的游戏引擎中使用,我还有一个“ Material ”编辑器,它允许您以图形方式编辑类似于 UDK Material 编辑器的 Material ,那里是一个使用 OpenGL 的预览窗口。

理想情况下,我希望保留我目前的设计,即拥有一个可通过选项卡导航的统一游戏编辑器,而不是为编辑器的每个部分都使用单独的程序。

唯一看起来不错的解决方案是使用 QGraphicsView 并将 QGLWidget 设置为视口(viewport),但这似乎根本不起作用。我可以渲染基本图元,但是再多一点它就会分崩离析。

有没有人有处理多个 OpenGL 小部件这个问题的经验,如果有,您能解释一下您为实现目标所采取的过程吗?

最佳答案

我不太明白你为什么遇到这么多麻烦,我正在构建一个类似 CAD 的应用程序,所以分享一些上下文,如下所示:

  • 我使用应用程序范围的隐藏 QGLWidget 作为我的主窗口类的成员,这是加载的上下文着色器。
  • 对于每个文档窗口,窗口类都有一个隐藏的QGLWidget成员,这是加载的上下文几何体。着色器上下文用作它的“共享”小部件,允许文档访问到应用范围的着色器。
  • 每个文档窗口中的 5 个视口(viewport)中的每一个都是可见的 QGLWidget,这是实际渲染发生的地方。文档窗口几何 QGLWidget 用作“共享”小部件,因此视口(viewport)可以访问文档范围的几何数据和应用程序范围的着色器。

共享小部件参数允许您创建上下文的“继承”树,每个上下文都可以访问它自己的和所有它的祖先数据(但不是它的 child 或 sibling )。

关于c++ - Qt 和 OpenGL,为多个小部件使用一个上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13296970/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com